AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=2844
【题解】
用高斯消元求出线性基。
然后这题要求不去重。。。
注意到如果求出来的矩阵有k个0,那么重复次数就是2^k,然后瞎搞就行了。
/*************
bzoj 2844
by chty
2016.12.18
*************/
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
#define FILE "read"
#define up(i,j,n) for(ll i=j;i<=n;i++)
#define down(i,j,n) for(ll i=j;i>=n;i--)
const ll mod=10086;
ll n,q,a[100010];
namespace INIT{
inline ll read(){
ll x=0,f=1; char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-1; ch=getchar();}
while(isdigit(ch)) {x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
}using namespace INIT;
ll guess(){
ll temp(0);
for(ll i=(1ll<<62),j;i;i>>=1){
for(j=temp+1;j<=n;j++) if(a[j]&i) break;
if(j>n) continue;
swap(a[++temp],a[j]);
up(j,1,n) if((a[j]&i)&&j!=temp) a[j]^=a[temp];
}
return temp;
}
int main(){
freopen(FILE".in","r",stdin);
freopen(FILE".out","w",stdout);
n=read();
up(i,1,n) a[i]=read();
ll cnt=guess(),temp(0),ans(0);
q=read();
up(i,1,cnt) if((a[i]^temp)<=q) temp^=a[i],ans+=(1ll<<(cnt-i))%mod,ans%=mod;
up(i,1,n-cnt) ans<<=1,ans%=mod; ans++; ans%=mod;
printf("%lld\n",ans);
return 0;
}