CF1628C Grid Xor 做题记录

给定 n×nn \times n 的矩阵 aa,求满足 aa 中任意一个元素等于 bb 中与其相邻元素的异或和的矩阵 bb 的异或和。

2n10002 \le n \le 1000nn 是偶数。

直接在斜线上面构造即可。

代码如下:

#include <iostream>
#include <cstdio>

using namespace std;

const int S=1005;

int n,a[S][S];

inline void slove()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&a[i][j]);
	int ans=0;
	for(int i=1;i<=n+n-1;i+=4)
	{
		int sx=1+max(i-n,0),sy=min(i,n);
		for(int i=1;i<=n;i+=2)
		{
			int px=sx+i-1,py=sy-i+1;
			if(px<1||px>n||py<1||py>n) break;
			ans^=a[px][py];
		}
		sx=1+max(i-n,0),sy=max(1,n-i+1);
		for(int i=1;i<=n;i+=2)
		{
			int px=sx+i-1,py=sy+i-1;
			if(px<1||px>n||py<1||py>n) break;
			ans^=a[px][py];
		}
	}
	printf("%d\n",ans);
}

int main()
{
	int T;
	scanf("%d",&T);
	while(T--) slove();
	return 0;
}