[bzoj1923]外星千足虫[高斯消元]

时间:2023-03-09 18:18:57
[bzoj1923]外星千足虫[高斯消元]

高斯消元解异或方程组

 #include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <bitset> using namespace std; int n,m,Ans;
char str[];
bitset<> a[]; void Gauss()
{
int i,j,k,cur=;
for(i=;i<=n;++i)
{
cur++;j=cur;
while(!a[j][i] && j<=m)j++;
if(j==m+){Ans=-;return ;}
else Ans=max(Ans,j);
if(j!=cur)swap(a[j],a[cur]);
for(k=;k<=m;++k)
if(a[k][i] && k!=cur)a[k]^=a[cur];
}
return ;
} int main()
{
int i,j; scanf("%d%d",&n,&m);
for(i=;i<=m;++i)
{
scanf("%s",str+);
for(j=;j<=n;++j)a[i][j]=str[j]-;
scanf("%s",str+);
a[i][n+]=str[]-;
} Gauss(); if(Ans==-){printf("Cannot Determine\n");goto End;}
printf("%d\n",Ans);
for(i=;i<=n;++i)
printf("%s\n",a[i][n+]?"?y7M#":"Earth");
End:
return ;
}