按照矩阵乘法形势 进行异或和
给出的 都是 01矩阵 所以 只有 4种情况 那么就是
1 ^ 0, 1 ^ 1, 0 ^ 1, 0 ^ 0;
值分别为 1,0,1,0 所以完全可以把他当作加减来看待
每一次异或就是 abs(a - b)
当 a 为 1的时候 abs (a - b) 一定等于 a - b
当a 为 0 的时候 abs(a - b) 一定等于 a + b
所以无论如何 都会 加上 a 所以我们不妨把a全部都先加上
讨论b的时候 我们可以考虑 当 b等于 1 或者 等于 -1 或者 等于 0的时候 对于 %2 是没有影响的
所以 + b - b也是无所谓得
所以实现矩阵的时候 b总体值 统一为 奇数或者 偶数
所以这个时候 只要看 a 和 c 的奇偶性 是否相同就行了
#include<iostream>
#include<cstring>
using namespace std;
const int N = 1e4 + 10;
int sumx[N],sumy[N];
int main(){
int t;
cin >> t;
while(t--){
memset(sumx,0,sizeof sumx);
memset(sumy,0,sizeof sumy);
int n;
cin >> n;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
int x;
scanf("%d",&x);
sumx[i] +=x;
}
}
for(int j = 1; j <= n; j++){
int x;
scanf("%d",&x);
sumy[j] = sumx[1] + x;
}
bool flag = true;
for(int i = 2; i <= n; i++){
for(int j = 1; j <= n; j++){
int x;
scanf("%d",&x);
if((sumx[i] + x) % 2 != sumy[j] % 2){
flag = false;
}
}
}
if(flag) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}