洛咕 P2447 [SDOI2010]外星千足蟲
阿新 • • 發佈:2018-11-10
一開始以為是異或高斯消元,實際上是簡單線性基。
直接往線性基裡插入,直到線性基滿了就解出來了。
// luogu-judger-enable-o2 #include<bits/stdc++.h> #define il inline #define vd void typedef long long ll; il int gi(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)){ if(ch=='-')f=-1; ch=getchar(); } while(isdigit(ch))x=x*10+ch-'0',ch=getchar(); return x*f; } std::bitset<1001>f[1001],s; char S[1010],y[1010]; bool ans[1010]; int main(){ #ifndef ONLINE_JUDGE freopen("2309.in","r",stdin); freopen("2309.out","w",stdout); #endif int n=gi(),m=gi(),tot=0; for(int yyb=1;yyb<=m;++yyb){ scanf("%s",S+1); for(int i=1;i<=n;++i)s[i]=S[i]=='1'; s[0]=gi(); for(int i=s._Find_next(0);i<=n;i=s._Find_next(i)){ if(!y[i]){ y[i]=1,f[i]=s;++tot; if(tot==n){ for(int i=n;i;--i){ ans[i]=f[i][0]; for(int j=f[i]._Find_next(i);j<=n;j=f[i]._Find_next(j)) ans[i]^=ans[j]; } printf("%d\n",yyb); for(int i=1;i<=n;++i)puts(ans[i]?"?y7M#":"Earth"); return 0; } break; }else s^=f[i]; } } puts("Cannot Determine"); return 0; }