Submission #1337776

#TimeUsernameProblemLanguageResultExecution timeMemory
1337776boclobanchatBroken Device (JOI17_broken_device)C++20
69 / 100
18 ms1564 KiB
#include"Annalib.h"
#include<bits/stdc++.h>
using namespace std;
bool ck[222],ans[222];
void Anna(int N,long long X,int K,int P[])
{
	int cx=0,cy=0;
	for(int i=0;i<=60;i++) cx+=((X>>i)%2);
	long long inf=0;
	if(cx>61-cx)
	{
		inf=0;
		for(int i=0;i<60;i++) inf=inf*2+((X>>i)%2);
	}
	else
	{
		inf=1;
		for(int i=0;i<60;i++) inf=inf*2+(1-(X>>i)%2);
	}
	int st=0;
	for(int i=0;i<K;i++) ck[P[i]]=true;
	for(int i=0;i<N;i++) if(!ck[i])
	{
		st=i;
		break;
	}
	ans[st]=true;
	for(int i=60;i+1;i--)
	{
		int nex=st+1;
		if(!((inf>>i)%2)) nex=st+2;
		while(ck[nex]) nex+=2;
		ans[nex]=true,st=nex;
	}
	for(int i=0;i<N;i++) Set(i,ans[i]);
	for(int i=0;i<N;i++) ck[i]=ans[i]=false;
}
#include"Brunolib.h"
#include<bits/stdc++.h>
using namespace std;
long long Bruno(int N,int A[])
{
	long long ans=0;
	int st=-1,cc=0;
	for(int i=N-1;i+1&&cc<62;i--) if(A[i])
	{
		cc++;
		if(st==-1) st=i;
		else ans=ans*2+(st-i)%2,st=i;
	}
	if(ans%2==0) ans/=2;
	else ans=((ans/2)^((1LL<<60)-1));
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...