[TJOI2008]彩燈,洛谷P3857,線性基
阿新 • • 發佈:2018-11-09
正題
這一題很水。
如果一個開關是沒有必要的,當且僅當若干個開關異或起來可以得到它。
用線性基就可以判斷一個開關是否有必要。
設有必要的開關總數為,答案就是。
這個也可以從有多少個線性基中有數來理解?
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> using namespace std; int n,m; char s[60]; long long p[55]; void insert(long long x){ for(int i=n;i>=0;i--) if(x>>i){ if(p[i]) x^=p[i]; else {p[i]=x;break;} } } int main(){ scanf("%d %d",&n,&m); long long x; for(int i=1;i<=m;i++){ scanf("%s",s+1); x=0; for(int j=1;j<=n;j++) x+=s[j]=='O'?(1ll<<(j-1)):0; insert(x); } int ans=1; for(int i=n;i>=0;i--) if(p[i]) (ans*=2)%=2008; printf("%d",ans); }