给定 的矩阵 ,求满足 中任意一个元素等于 中与其相邻元素的异或和的矩阵 的异或和。
, 是偶数。

直接在斜线上面构造即可。
代码如下:
#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;
}
