zoukankan      html  css  js  c++  java
  • luogu 3857 [TJOI2008]彩灯 线性基

    可以将每一个开关控制的灯的序列看作是0/1组成的二进制.   

    由于灯的开和关是满足异或的性质的,所以直接求一下线性基大小即可. 

    答案为 $2^{size}.$

    #include <cstdio>  
    #include <cstring> 
    #include <algorithm>
    #define N 62  
    #define M 62 
    #define ll long long 
    #define setIO(s) freopen(s".in","r",stdin) 
    using namespace std;  
    int n,m;  
    ll d[N<<1]; 
    char str[N];  
    void insert(ll x) 
    {
        int i;   
        for(i=M;i>=0;--i)       
        {
            if(x&(1ll<<i)) 
            {
                if(d[i]) x^=d[i]; 
                else
                {
                    d[i]=x; 
                    break; 
                }
            }
        }
    }
    int main() 
    { 
        int i,j; 
        // setIO("input");  
        scanf("%d%d",&m,&n); 
        for(i=1;i<=n;++i) 
        {  
            scanf("%s",str);    
            ll num=0; 
            int length=strlen(str);  
            for(j=0;j<length;++j) 
            {
                if(str[j]=='O') 
                {
                    num+=(1ll<<(length-j-1));            
                }
            }   
            insert(num); 
        }
        int ans=0; 
        for(i=M;i>=0;--i) if(d[i]) ++ans;  
        printf("%d
    ",(1ll<<ans)%2008);     
        return 0; 
    }
    

      

  • 相关阅读:
    Mysql基础
    Mysql基础2
    Windows CMD命令大全
    python 调试方法
    LDAP
    Linux 内核与模块调试
    Linux tee命令
    Linux kgdb命令
    OpenSSL基础知识
    Linux top命令
  • 原文地址:https://www.cnblogs.com/guangheli/p/11532307.html
Copyright © 2011-2022 走看看