제출 #1337910

#제출 시각아이디문제언어결과실행 시간메모리
1337910boclobanchatBroken Device (JOI17_broken_device)C++20
100 / 100
47 ms1568 KiB
#include"Annalib.h"
#include<bits/stdc++.h>
using namespace std;
mt19937_64 rng(27022009);
long long Rand(long long l,long long r) { return uniform_int_distribution<long long>(l,r)(rng); }
bool ck[222];
long long basus[222];
void Anna(int N,long long X,int K,int P[])
{
	for(int i=0;i<N;i++) basus[i]=Rand(0,(1LL<<60)-1);
	for(int i=0;i<K;i++) ck[P[i]]=true;
	bitset<222> bt;
	vector< pair< bitset<222>,long long > > S;
	for(int i=0;i<N;i++) if(!ck[i])
	{
		long long res=basus[i];
		bitset<222> f;
		f[i]=1;
		for(auto v:S) if(res>(res^v.second)) res^=v.second,f^=v.first;
		if(res) S.push_back({f,res});
	}
	bt=0;
	for(auto v:S) if(X>(X^v.second)) X^=v.second,bt^=v.first;
	for(int i=0;i<N;i++) Set(i,bt[i]);
	for(int i=0;i<N;i++) ck[i]=false;
}
#include"Brunolib.h"
#include<bits/stdc++.h>
using namespace std;
mt19937_64 rng(27022009);
long long Rand(long long l,long long r) { return uniform_int_distribution<long long>(l,r)(rng); }
long long basus[222];
long long Bruno(int N,int A[])
{
	for(int i=0;i<N;i++) basus[i]=Rand(0,(1LL<<60)-1);
	long long ans=0;
	for(int i=0;i<N;i++) if(A[i]) ans^=basus[i];
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...