题目
传送门:QWQ
分析
高斯消元解异或方程组,和解普通方程组差不多。
范围有点大,要套一个bitset。
代码
#include <bits/stdc++.h> using namespace std; const int maxn = 1050; bitset<maxn> a[maxn*2]; int n, m, b[maxn*2], ans=0; void Gauss() { for(int i=1;i<=n;i++) { int flag=1; for(int j=i;j<=m;j++) if(a[j][i]!=0) { swap(a[i],a[j]); swap(b[i],b[j]); flag=0; ans = max(ans, j); break; } if(flag) { puts("Cannot Determine"); return; } for(int j=1;j<=m;j++) { if(i==j) continue; if(a[j][i]) { a[j]^=a[i]; b[j]^=b[i]; } } } printf("%d ", ans); for(int i=1;i<=n;i++) if(b[i]) printf("?y7M# "); else printf("Earth "); } int main() { int q=0; scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) { scanf("%1d",&q); a[i][j]=q; } scanf("%d",&b[i]); } Gauss(); }