#include<bits/stdc++.h>
#include "Broken_device_lib.h"
#define ll long long
using namespace std;
const int maxn=150;
const int maxm=60;
// int cs[maxn];
// inline void Set(int x,int y){
// cs[x]=y;
// printf("%d %d\n",x,y);
// }
void Anna(int n,ll x,int k,int p[]){
mt19937_64 rnd(20090327);
ll c[maxn];
for(int i=0;i<maxn;i++) c[i]=rnd()&((1ll<<60)-1);
bool b[maxn];
for(int i=0;i<k;i++) b[p[i]]=1;
ll a[maxm];
for(int j=0;j<maxm;j++) a[j]=0;
bitset<maxn> bs[maxm],tmp;
for(int i=0;i<maxn;i++){
if(b[i]) continue;
tmp.reset();
tmp[i]=1;
for(int j=maxm-1;j>=0;j--){
if((c[i]>>j)&1){
if(!a[j]){
a[j]=c[i];
bs[j]=tmp;
break;
}
else{
c[i]^=a[j];
tmp^=bs[j];
}
}
}
}
tmp.reset();
for(int j=maxm-1;j>=0;j--){
if((x>>j)&1){
x^=a[j];
tmp^=bs[j];
}
}
for(int i=0;i<n;i++)
Set(i,tmp[i]);
}
ll Bruno(int n,int a[]){
mt19937_64 rnd(20090327);
ll res=0;
for(int i=0;i<n;i++)
res^=a[i]*(rnd()&((1ll<<60)-1));
return res;
}
// signed main(){
// int a[40];
// for(int i=0;i<40;i++) a[i]=i;
// Anna(150,123456789101112ll,40,a);
// cout<<Bruno(150,cs);
// }
https://atcoder.jp/contests/joisc2017/submissions/61319147
一直 WA,是我的问题吗?
本地测起来感觉没什么问题。