概要
整数 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; }