洛谷P3857 [TJOI2008]彩灯(线性基)
线性基裸题
直接把所有的状态都带进去建一个线性基
然后答案就是$2^{cnt}$($cnt$代表线性基里数的个数)
1 //minamoto 2 #include<cstdio> 3 #include<cstring> 4 #define ll long long 5 const int N=55; 6 ll b[N],a[N];int n,m,cnt;char s[N]; 7 inline void insert(ll x){ 8 for(int i=50;i>=0;--i) 9 if(x>>i&1){ 10 if(!b[i]) return (void)(b[i]=x,++cnt); 11 x^=b[i]; 12 } 13 } 14 int main(){ 15 scanf("%d%d",&n,&m); 16 for(int i=1;i<=m;++i){ 17 scanf("%s",s); 18 for(int j=0;j<n;++j) 19 if(s[j]=='O') a[i]|=1ll<<j; 20 } 21 for(int i=1;i<=m;++i) insert(a[i]); 22 printf("%lld\n",(1ll<<cnt)%2008); 23 return 0; 24 }
深深地明白自己的弱小