Luogu P2447 [SDOI2010]外星千足虫 高斯消元
给出的条件是异或类型的方程,可以直接用bitset优化高斯消元。
至于求K,在高斯消元时记录用到的最大的方程的编号即可。
代码:
1 // luogu-judger-enable-o2 2 #include<bits/stdc++.h> 3 using namespace std; 4 #define N 1007 5 #define M 2007 6 char s[N]; 7 bitset<N> b[M]; 8 int n,m; 9 int main() 10 { 11 int i,j; 12 scanf("%d%d",&n,&m); 13 for(i=1;i<=m;i++) 14 { 15 scanf("%s",s+1); 16 for(j=1;j<=n;j++) 17 b[i][j]=s[j]-'0'; 18 scanf("%s",s); 19 b[i][n+1]=s[0]-'0'; 20 } 21 int ans=0; 22 for(i=1;i<=n;i++) 23 { 24 for(j=i;j<=m&&!b[j][i];j++); 25 if(j>m)break; 26 ans=max(ans,j); 27 swap(b[j],b[i]); 28 for(j=1;j<=m;j++) 29 if(i!=j&&b[j][i])b[j]^=b[i]; 30 } 31 if(i<=n)printf("Cannot Determine\n"); 32 else 33 { 34 printf("%d\n",ans); 35 for(i=1;i<=n;i++) 36 { 37 if(b[i][n+1])printf("?y7M#\n"); 38 else printf("Earth\n"); 39 } 40 } 41 return 0; 42 }