Magic Grid

tech2025-06-09  18

题意:把0~n^2-1 之间的所有数填进n*n的矩阵,让整个矩阵的横向和纵向异或和相同。 思路: 小技巧就是偶数与它下一个数 异或和为1,偶数开始的4个异或和为0,然后我们突发奇想 构造一个 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 然后发现这个矩阵刚好符合。由于n能被4整除,我们可以分成n^2/16个矩阵,每个矩阵加上一个偏移量16就行了。由于后面的每个数 加上的偶数的16偏移量,对答案0是不影响的。

#include<iostream> #include<cstring> #include<queue> #include<algorithm> using namespace std; typedef long long ll; const int N=1010; int x[N]; int ans[N][N]; int cnt; int n; void solve(int x,int y) { for(int i=0;i<4;i++) for(int j=0;j<4;j++) ans[x+i][y+j]=cnt++; } int main() { cin >> n; for(int i=1;i<=n;i+=4) for(int j=1;j<=n;j+=4) solve(i,j); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) cout<<ans[i][j]<<' '; cout<<endl; } return 0; }
最新回复(0)