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

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