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

高斯消元解异或方程组

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstdlib>
 5 #include <cstring>
 6 #include <cmath>
 7 #include <ctime>
 8 #include <bitset>
 9 
10 using namespace std;
11 
12 int n,m,Ans;
13 char    str[1100];
14 bitset<1100>  a[2100];
15 
16 void    Gauss()
17 {
18     int i,j,k,cur=0;
19     for(i=1;i<=n;++i)
20     {
21         cur++;j=cur;
22         while(!a[j][i] && j<=m)j++;
23         if(j==m+1){Ans=-1;return ;}
24         else    Ans=max(Ans,j);
25         if(j!=cur)swap(a[j],a[cur]);
26         for(k=1;k<=m;++k)
27             if(a[k][i] && k!=cur)a[k]^=a[cur];
28     }
29     return ;
30 }
31 
32 int main()
33 {
34     int i,j;
35 
36     scanf("%d%d",&n,&m);
37     for(i=1;i<=m;++i)
38     {
39         scanf("%s",str+1);
40         for(j=1;j<=n;++j)a[i][j]=str[j]-48;
41         scanf("%s",str+1);
42         a[i][n+1]=str[1]-48;
43     }
44 
45     Gauss();
46 
47     if(Ans==-1){printf("Cannot Determine\n");goto End;}
48     printf("%d\n",Ans);
49     for(i=1;i<=n;++i)
50         printf("%s\n",a[i][n+1]?"?y7M#":"Earth");
51 End:
52     return 0;
53 }

 

posted @ 2015-12-31 02:27  Gster  阅读(260)  评论(0编辑  收藏  举报