发现矩阵
\[ \begin{align*} &0\ 1\ 2\ 3\\ &4\ 5\ 6\ 7\\ &8\ 9\ 10\ 11\\ &12\ 13\ 14\ 15\\ \end{align*} \] 每行和每列的\(\rm xor\)和为0,发现每个位置加上\(16x\)也不会改变\(\rm xor\)和所以我们考虑将\(n \times n\)的格子全部划分成\(4\times4\)的
代码:
#include#include #include #include using namespace std;#define rg registervoid read(int &x){ char ch;bool ok; for(ok=0,ch=getchar();!isdigit(ch);ch=getchar())if(ch=='-')ok=1; for(x=0;isdigit(ch);x=x*10+ch-'0',ch=getchar());if(ok)x=-x;}const int manx=1010;int n,m;int main(){ read(n);m=n/4; for(rg int i=1;i<=n;i++,printf("\n")){ for(rg int j=1;j<=n;j++){ int x=i%4,y=j%4;if(x==0)x=4;if(y==0)y=4;x--,y--; printf("%d ",((i-1)/4*m+(j-1)/4)*16+x*4+y); } }}