kmjp's blog

競技プログラミング参加記です

yukicoder : No.1587 012 Matrix

パズル系の問題。
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;
	}
	
}

まとめ

構築系苦手だけど、これはすんなりできた。