题解 luogu 3857 [TJOI2008]彩灯 (线性基)

Posted ning-mew

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解 luogu 3857 [TJOI2008]彩灯 (线性基)相关的知识,希望对你有一定的参考价值。

luogu3857,懒得复制

Solution:

  • 裸的线性基,往里面添加数,记录添加个数(sum),快速幂输出(2^{sum})即可

Code:

//It is coded by Ning_Mew on 5.30
#include<bits/stdc++.h>
#define LL long long
using namespace std;

const int maxn=70,MOD=2008;

int n,m;
LL s[maxn],x[maxn],ans=0;

LL read(){
  char ch=getchar();LL re=0;
  while(ch!='O'&&ch!='X')ch=getchar();
  while(ch=='O'||ch=='X'){
    if(ch=='O')re=((re<<1)^1);
    if(ch=='X')re=(re<<1);
    ch=getchar();
  }return re;
}
bool push(LL ss){
  for(int i=63;i>=0;i--){
    if((ss>>i)&1){
      if(!x[i]){x[i]=ss;return true;}
      else ss=(ss^x[i]);
    }
  }return false;
}
LL q_pow(LL x,LL t){
  LL re=1;
  while(t){
    if(t%2){re=(re*x%MOD);}
    x=x*x%MOD;
    t=t/2;
  }return re;
}
int main(){
  scanf("%d%d",&n,&m);
  for(int i=1;i<=m;i++){
    s[i]=read();//cout<<i<<' '<<s[i]<<endl;
  }
  for(int i=1;i<=m;i++){
    if(push(s[i]))ans++;
  }
  printf("%lld
",q_pow(2,ans));
  return 0;
}

博主蒟蒻,随意转载。但必须附上原文链接:http://www.cnblogs.com/Ning-Mew/,否则你会终生找不到妹子!!!

以上是关于题解 luogu 3857 [TJOI2008]彩灯 (线性基)的主要内容,如果未能解决你的问题,请参考以下文章

P3857 [TJOI2008]彩灯(线性基)

luogu3856TJOI2008公共子串 [动态规划]

luogu题解 P3763 [TJOI2017]DNA

luogu P3879 [TJOI2010]阅读理解 题解

题解Luogu P5337 [TJOI2019]甲苯先生的字符串

题解Luogu P4588 [TJOI2018]数学计算