没搞懂怎么通信求助
查看原帖
没搞懂怎么通信求助
510957
DeepSeaSpray楼主2025/1/2 19:37
#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,是我的问题吗?

本地测起来感觉没什么问题。

2025/1/2 19:37
加载中...