Submission #1319738

#TimeUsernameProblemLanguageResultExecution timeMemory
1319738PlayVoltzBroken Device (JOI17_broken_device)C++20
8 / 100
20 ms1516 KiB
#include "Annalib.h"
#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define mp make_pair
#define pii pair<int, int>
#define fi first
#define se second

void Anna(int n, long long x, int k, int p[]){
	vector<bool> die(n, 0), res1(n, 0), res2(n, 0), res3(n, 0), res4(n, 0);
	for (int i=0; i<k; ++i)die[p[i]]=1;
	int first1=2, first2=2, first3=2, first4=2;
	long long b1=0, b2=0, b3=0, b4=0;
	for (int i=0; i<n/2&&b1<60; ++i){
		if (die[i]&&die[i+n/2])continue;
		if (first1){
			if (!die[i])res1[i]=1, --first1;
			continue;
		}
		if (!die[i]&&!die[i+n/2]){
			if ((1ll<<b1)&x)res1[i]=1;
			else res1[i+n/2]=1;
			++b1;
		}
		else if (die[i]){
			if (!((1ll<<b1)&x))res1[i+n/2]=1, ++b1;
		}
		else{
			if ((1ll<<b1)&x)res1[i]=1, ++b1;
		}
	}
	for (int i=0; i<n/2&&b2<60; ++i){
		if (die[i]&&die[i+n/2])continue;
		if (first2){
			if (!die[i+n/2])res2[i+n/2]=1, --first2;
			continue;
		}
		if (!die[i]&&!die[i+n/2]){
			if ((1ll<<b2)&x)res2[i+n/2]=1;
			else res2[i]=1;
			++b2;
		}
		else if (die[i]){
			if ((1ll<<b2)&x)res2[i+n/2]=1, ++b2;
		}
		else{
			if (!((1ll<<b2)&x))res2[i]=1, ++b2;
		}
	}
	for (int i=0; i<n/2&&b3<60; ++i){
		if (die[i]&&die[i+n/2])continue;
		if (first3){
			if (first3==2){
				if (!die[i])res3[i]=1, --first3;
			}
			else{
				if (!die[i+n/2])res3[i+n/2]=1, --first3;
			}
			continue;
		}
		if (b3%2){
			if (!die[i]&&!die[i+n/2]){
				if ((1ll<<b3)&x)res3[i]=1;
				else res3[i+n/2]=1;
				++b3;
			}
			else if (die[i]){
				if (!((1ll<<b3)&x))res3[i+n/2]=1, ++b3;
			}
			else{
				if ((1ll<<b3)&x)res3[i]=1, ++b3;
			}
		}
		else{
			if (!die[i]&&!die[i+n/2]){
				if (!((1ll<<b3)&x))res3[i]=1;
				else res3[i+n/2]=1;
				++b3;
			}
			else if (die[i]){
				if ((1ll<<b3)&x)res3[i+n/2]=1, ++b3;
			}
			else{
				if (!((1ll<<b3)&x))res3[i]=1, ++b3;
			}
		}
	}
	for (int i=0; i<n/2&&b4<60; ++i){
		if (die[i]&&die[i+n/2])continue;
		if (first4){
			if (first4==2){
				if (!die[i+n/2])res4[i+n/2]=1, --first4;
			}
			else{
				if (!die[i])res4[i]=1, --first4;
			}
			continue;
		}
		if (b4%2){
			if (!die[i]&&!die[i+n/2]){
				if (!((1ll<<b4)&x))res4[i]=1;
				else res4[i+n/2]=1;
				++b4;
			}
			else if (die[i]){
				if ((1ll<<b4)&x)res4[i+n/2]=1, ++b4;
			}
			else{
				if (!((1ll<<b4)&x))res4[i]=1, ++b4;
			}
		}
		else{
			if (!die[i]&&!die[i+n/2]){
				if ((1ll<<b4)&x)res4[i]=1;
				else res4[i+n/2]=1;
				++b4;
			}
			else if (die[i]){
				if (!((1ll<<b4)&x))res4[i+n/2]=1, ++b4;
			}
			else{
				if ((1ll<<b4)&x)res4[i]=1, ++b4;
			}
		}
	}
	if (b1==max({b1, b2, b3, b4}))for (int i=0; i<n; ++i)Set(i, res1[i]);
	else if (b2==max({b1, b2, b3, b4}))for (int i=0; i<n; ++i)Set(i, res2[i]);
	else if (b3==max({b1, b2, b3, b4}))for (int i=0; i<n; ++i)Set(i, res3[i]);
	else for (int i=0; i<n; ++i)Set(i, res4[i]);
}
#include "Brunolib.h"
#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define mp make_pair
#define pii pair<int, int>
#define fi first
#define se second

long long Bruno(int n, int vect[]){
	long long res=0, res2=0, b=0, res3=0, res4=0;
	int first=2, one=0;
	for (int i=0; i<n/2&&b<60; ++i){
		if (first){
			if (vect[i])one+=first, --first;
			else if (vect[i+n/2])--first;
			continue;
		}
		if (vect[i]){
			res+=(1ll<<b);
			if (b%2)res3+=(1ll<<b);
			else res4+=(1ll<<b);
			++b;
		}
		else if (vect[i+n/2]){
			res2+=(1ll<<b);
			if (b%2)res4+=(1ll<<b);
			else res3+=(1ll<<b);
			++b;
		}
	}
	if (one==3)return res;
	if (!one)return res2;
	if (one==1)return res4;
	return res3;
}
#Verdict Execution timeMemoryGrader output
Fetching results...