1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 int n,m,a[2009][2009],st=1; 5 char ch[6009]; 6 bool gao(int a1) 7 { 8 for(int i=st;i<=a1;i++) 9 { 10 int k; 11 for(k=i;k<=a1;k++) 12 if(a[k][i]) 13 break; 14 if(k==a1+1) 15 { 16 st=i; 17 return 0; 18 } 19 for(int j=1;j<=n+1;j++) 20 swap(a[i][j],a[k][j]); 21 k=a[i][i]; 22 for(int j=1;j<=m;j++) 23 if(i!=j&&a[j][i]) 24 { 25 k=a[j][i]; 26 for(int l=1;l<=n+1;l++) 27 a[j][l]=(a[j][l]-a[i][l]*k+2)%2; 28 } 29 if(i==n) 30 return 1; 31 } 32 } 33 int main() 34 { 35 scanf("%d%d",&n,&m); 36 for(int i=1;i<=m;i++) 37 { 38 scanf("%s",ch+1); 39 for(int j=1;j<=n;j++) 40 a[i][j]=ch[j]-'0'; 41 scanf("%d",&a[i][n+1]); 42 } 43 for(int i=n;i<=m;i++) 44 if(gao(i)) 45 { 46 printf("%d\n",i); 47 for(int i=1;i<=n;i++) 48 if(a[i][n+1]%2) 49 printf("?y7M#\n"); 50 else 51 printf("Earth\n"); 52 return 0; 53 } 54 printf("Cannot Determine\n"); 55 return 0; 56 }
据题目可知就是解方程,所以高斯消元法