Submission #99317

#TimeUsernameProblemLanguageResultExecution timeMemory
99317TadijaSebezBroken Device (JOI17_broken_device)C++11
100 / 100
64 ms3312 KiB
#include "Annalib.h"
#define ll long long
const int N=1050;
int ans[N],p[N];
void Anna(int n, ll x, int k, int q[])
{
	for(int i=0;i<n;i++) ans[i]=p[i]=0;
	for(int i=0;i<k;i++) p[q[i]]=1;
	for(int i=0;i+2<n;i+=3)
	{
		if(p[i]+p[i+1]+p[i+2]>=2) continue;
		if(p[i])
		{
			if(x%2==0) ans[i+1]=ans[i+2]=1;
			if(x%2==1) ans[i+2]=1;
			x/=2;
		}
		else if(p[i+1])
		{
			if(x%2==0) ans[i]=1;
			if(x%2==1) ans[i+2]=1;
			x/=2;
		}
		else if(p[i+2])
		{
			if(x%2==0) ans[i]=1;
			if(x%4==1) ans[i+1]=1;
			if(x%4==3) ans[i]=ans[i+1]=1;
			if(x%2==0) x/=2;
			else x/=4;
		}
		else
		{
			if(x%4==0) ans[i]=ans[i+1]=ans[i+2]=1;
			if(x%4==1) ans[i+1]=1;
			if(x%4==2) ans[i]=ans[i+2]=1;
			if(x%4==3) ans[i]=ans[i+1]=1;
			x/=4;
		}
	}
	for(int i=0;i<n;i++) Set(i,ans[i]);
}
#include "Brunolib.h"
#define ll long long
ll Bruno(int n, int ans[])
{
	ll x=0;
	for(int i=n-3;i>=0;i-=3)
	{
		int tmp=4*ans[i]+2*ans[i+1]+ans[i+2];
		if(tmp==1) x*=2,x++;
		if(tmp==2) x*=4,x++;
		if(tmp==3) x*=2;
		if(tmp==4) x*=2;
		if(tmp==5) x*=4,x+=2;
		if(tmp==6) x*=4,x+=3;
		if(tmp==7) x*=4;
	}
	return x;
}
#Verdict Execution timeMemoryGrader output
Fetching results...