パズル系の問題。
https://yukicoder.me/problems/no/1587
問題
正偶数Nが指定される。
以下を満たすN次正方行列を構築せよ。
- 各要素の値は0,1,2のいずれか。
- 各行rの和A[r]と、各列cの和B[c]の計2N個の値は互いに異なる。
解法
2*2のケースを考えると、以下の作り方でA,Bに1,2,3,4が登場するようにできる。
02 12
これをアレンジし、以下のように並べると、A[2k]=k+1、A[2k+1]=2N-k、B[2k]=k+2、B[2k+1]=2N-k-1となる。
0200000000 1222222222 0202000000 0212222222 0202020000 0202122222 0202020200 0202021222 0202020202 0202020212
int N; int A[505][505]; void solve() { int i,j,k,l,r,x,y; string s; cin>>N; for(x=1;x<N;x+=2) { for(y=x-1;y<N;y++) A[y][x]=2; } for(y=1;y<N;y+=2) { A[y][y-1]=1; for(x=y;x<N;x++) A[y][x]=2; } FOR(y,N) { FOR(x,N) cout<<A[y][x]; cout<<endl; } }
まとめ
構築系苦手だけど、これはすんなりできた。