70pts求助
查看原帖
70pts求助
574568
Dr_Gilbert南科蛤蟆楼主2022/5/11 17:00
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod=10086;
int base[32],b[32],tot;
bool add(int x){
	for (int i=31;i>=0;i--){
		if (x&(1ll<<i)){
			if (!base[i]){base[i]=x;return 1;}
			x^=base[i];
		}
	}
	return 0;
}
void rebuild(){
	for (int i=0;i<32;i++){
		for (int j=i-1;j>=0;j--){
			if (base[i]&(1ll<<j)) base[i]^=base[j];
		}
	}
	for (int i=0;i<32;i++){
		if (base[i]) b[tot++]=base[i];
	}
	return;
}
int qrank(int x){
	int ret=0;
	for (int i=0;i<tot;i++){
		if ((x&b[i])==b[i]) ret+=(1ll<<i);
	}
	return ret;
}
int qpow(int a, int k){
	if (k==0) return 1;
	if (k==1) return a;
	int ret=qpow(a,k/2);
	if (k%2) (ret*=qpow(a,k-k/2)%mod)%=mod;
	else (ret*=ret)%=mod;
	return ret;
}
signed main(){
	int n,tmp=1;cin>>n;
	for (int i=1;i<=n;i++){
		int x;cin>>x;add(x);
	} 
	rebuild();
	int k;cin>>k;
	int ans=qrank(k)%mod*qpow(2,n-tot)+1;
	cout<<ans%mod;
	return 0;
}
2022/5/11 17:00
加载中...