torus711 のアレ

主に競技プログラミングの問題について書きます.PC 以外だと数式が表示されないかもしれないです

Codeforces #210, Division 2, A : Levko and Table

概要

整数 n, k が与えられる。
n × n の正方行列であって、各行と列の総和が k であるようなものを一つ出力せよ。

解法

対角要素に k を並べることで、行・列に関する制約を共に満たすことができます。

コード

typedef vector<int> VI;

#define REP( i, m, n ) for ( int i = (int)( m ); i < (int)( n ); ++i )
#define DRANGE( c, p ) (c).begin(), (c).begin() + p, (c).end()

int main()
{
	cin.tie( 0 );
	ios::sync_with_stdio( false );

	int n, k;
	cin >> n >> k;

	VI as( n, 0 );
	as[0] = k;

	REP( iteration, 0, n )
	{
		REP( i, 0, n )
		{
			cout << as[i] << ( i + 1 < n ? ' ' : '\n' );
		}
		cout << flush;

		rotate( DRANGE( as, n - 1 ) );
	}

	return 0;
}