问最后答案统计
查看原帖
问最后答案统计
271803
over_caykl楼主2023/5/16 23:56

rt,下面是第三篇题解。
q读入后,为什么要那样统计答案。

#include<iostream>
#include<cstdio>
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[1<<21],*p1=buf,*p2=buf;
inline int read(){
    #define num ch-'0'
    char ch;bool flag=0;int res;
    while((ch=getc())>'9'||ch<'0')
    (ch=='-')&&(flag=true);
    for(res=num;(ch=getc())<='9'&&ch>='0';res=res*10+num);
    (flag)&&(res=-res);
    #undef num
    return res;
}
const int mod=10086;
int b[35],st[35],top,n,q,rk;
inline int ksm(int x,int y){
    int res=1;
    while(y){
        if(y&1) (res*=x)%=mod;
        (x*=x)%=mod,y>>=1;
    }
    return res;
}
void insert(int x){
    for(int i=30;i>=0;--i)
    if(x>>i&1){
        if(!b[i]) return (void)(b[i]=x);
        x^=b[i];		
    }
}
int main(){
//	freopen("testdata.in","r",stdin);
    n=read();
    for(int i=1,x;i<=n;++i) insert(x=read());
    q=read();
    for(int i=0;i<=30;++i)
    if(b[i]) st[top++]=i;
    for(int i=0;i<top;++i)
    if(q>>st[i]&1) rk+=1<<i;
    printf("%d\n",(1ll*rk*ksm(2,n-top)+1)%mod);
    return 0;
}
2023/5/16 23:56
加载中...