Submission #1205303

#TimeUsernameProblemLanguageResultExecution timeMemory
1205303MuhammadSaramBroken Device (JOI17_broken_device)C++20
0 / 100
19 ms1344 KiB
#include "Annalib.h"
#include <bits/stdc++.h>

using namespace std;

void Anna(int n, long long x, int k, int P[])
{
	bool off[n]={};
	for (int i=0;i<k;i++)
		off[P[i]]=1;
	int p=60;x<<=1;
	for (int i=0;i<n;i+=3)
	{
		int cnt=(off[i]+off[i+1]+off[i+2]),ass;
		if (cnt>=2 or !p)
			Set(i,0),Set(i+1,0),Set(i+2,0);
		else if(cnt==1)
		{
			int val=(x>>p)%2;p--;
			val=val*2+(x>>p)%2,p--;
			if (off[i])
			{
				if (val==1) ass=3;
				else if(val>=2) ass=2,p++;
				else ass=1,p++;
			}
			else if(off[i+1])
			{
				if (val==2) ass=4;
				else if(val==3) ass=5;
				else ass=1,p++;
			}
			else
			{
				if (val==2) ass=4;
				else if(val==3) ass=2,p++;
				else ass=6,p++;
			}
			Set(i,ass/4),Set(i+1,ass%4/2),Set(i+2,ass%2);
		}
		else
		{
			int val=(x>>p)%2;p--;
			if (p>=0) val=val*2+(x>>p)%2,p--;
			if (val==0) ass=7;
			else if(val==1) ass=3;
			else if(val==2) ass=4;
			else ass=5;
			Set(i,ass/4),Set(i+1,ass%4/2),Set(i+2,ass%2);
		}
	}
}
#include "Brunolib.h"
#include <bits/stdc++.h>

using namespace std;

long long Bruno(int n, int a[])
{
	long long ans=0;
	int cnt=0;
	vector<pair<int,int>> v={{1,0},{2,0},{2,1},{4,1},{4,2},{4,3},{2,0},{4,0}};
	for (int i=0;i<n;i+=3)
	{
		int val=a[i]*4+a[i+1]*2+a[i+2];
		ans=ans*v[val].first+v[val].second;
		cnt+=31-__builtin_clz(v[val].first);
	}
	if (cnt>60) ans>>=2;
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...