zoukankan      html  css  js  c++  java
  • Luogu P3857 [TJOI2008]彩灯

    把每个对应的序列看成二进制数,能控制就把这一位设为(1),那么每异或出来一个新的数就对应一种情况。
    根据线性基的性质,任意一个子集异或和都不一样,所以直接线性基即可。

    #include <cmath>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    #define R register
    #define LL long long
    
    const int Mod=2008;
    
    int n,m;
    char s[70];
    LL p[70];
    int cnt;
    LL a[70];
    
    inline void ins(LL x) {
    	for(R int i=62;i>=0;i--)
    		if(x&(1LL<<i)) {
    			if(!p[i]) { p[i]=x,cnt++; break; }
    			else x^=p[i];
    		}
    }
    
    int main() {
    //	freopen("a.in","r",stdin);
    	scanf("%d%d",&n,&m);
    	for(R int i=1;i<=m;i++) {
    		scanf("%s",s);
    		for(R int j=0;j<n;j++)
    			if(s[j]=='O') a[i]|=(1LL<<j);
    	}
    	for(R int i=1;i<=m;i++) ins(a[i]);
    	int ans=1;// printf("%d
    ",cnt);
    	while(cnt--) ans*=2,ans%=Mod;
    	printf("%d
    ",ans);
    	return 0;
    }
    
    
  • 相关阅读:
    Windows系统的DOS常用命令
    常用pom
    ssm整合
    pom依赖集合
    json
    软件项目管理笔记-软件项目计划
    CSS
    网络配置
    用户组
    用户管理
  • 原文地址:https://www.cnblogs.com/clover4/p/12812964.html
Copyright © 2011-2022 走看看