제출 #1323809

#제출 시각아이디문제언어결과실행 시간메모리
1323809PieArmyBroken Device (JOI17_broken_device)C++20
85 / 100
25 ms1552 KiB
#include "Annalib.h"
#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#define mid ((left+right)>>1)

void Anna(int N, long long X, int K, int P[]){
	vector<int>sira={43,10,26,142,70,74,107,129,0,119,143,60,110,109,91,1,94,22,35,17,126,69,145,56,83,39,135,100,15,137,147,113,102,130,21,59,16,131,50,34,124,3,29,106,138,31,89,136,80,61,115,98,132,108,66,42,47,40,7,18,25,6,2,73,30,101,82,62,20,8,127,58,84,19,116,103,125,118,27,75,55,86,120,52,141,14,99,57,95,104,5,12,92,97,46,33,77,148,41,53,78,90,121,111,87,96,63,64,93,11,38,23,13,134,68,36,65,105,114,4,149,28,123,146,144,85,133,67,112,44,9,54,32,45,24,117,122,72,49,139,88,81,140,128,79,37,51,76,48,71};
	int n;
	int arr[150];
	ll val;
	vector<int>v;
	n=N;
	val=X;
	for(int i=0;i<n;i++){
		arr[i]=0;
	}
	for(int i=0;i<K;i++){
		arr[P[i]]=1;
	}
	if(n!=150){
		sira.resize(n);
		iota(sira.begin(),sira.end(),0);
	}
	{
		ll x=val;
		int t=38;
		while(t--){
			v.pb(x%3);
			x/=3;
		}
		reverse(v.begin(),v.end());
	}
	int p=0;
	for(int i=0;i<n;i+=2){
		if(p==v.size()||arr[sira[i]]||(i!=n-1&&arr[sira[i+1]])){
			p--;
			Set(sira[i],0);
			if(i==n-1)break;
			Set(sira[i+1],0);
		}
		else if(v[p]==0){
			Set(sira[i],0);
			if(i==n-1)break;
			Set(sira[i+1],1);
		}
		else if(v[p]==1){
			Set(sira[i],1);
			if(i==n-1)break;
			Set(sira[i+1],0);
		}
		else{
			Set(sira[i],1);
			if(i==n-1)break;
			Set(sira[i+1],1);
		}
		p++;
	}
}
#include "Brunolib.h"
#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#define mid ((left+right)>>1)

long long Bruno(int N, int A[]){
	int n;
	vector<int>sira={43,10,26,142,70,74,107,129,0,119,143,60,110,109,91,1,94,22,35,17,126,69,145,56,83,39,135,100,15,137,147,113,102,130,21,59,16,131,50,34,124,3,29,106,138,31,89,136,80,61,115,98,132,108,66,42,47,40,7,18,25,6,2,73,30,101,82,62,20,8,127,58,84,19,116,103,125,118,27,75,55,86,120,52,141,14,99,57,95,104,5,12,92,97,46,33,77,148,41,53,78,90,121,111,87,96,63,64,93,11,38,23,13,134,68,36,65,105,114,4,149,28,123,146,144,85,133,67,112,44,9,54,32,45,24,117,122,72,49,139,88,81,140,128,79,37,51,76,48,71};
	n=N;
	if(n!=150){
		sira.resize(n);
		iota(sira.begin(),sira.end(),0);
	}
	ll ans=0;
	for(int i=0;i<n;i+=2){
		int x=A[sira[i]]*2;
		if(i!=n-1)x+=A[sira[i+1]];
		if(!x)continue;
		ans*=3;
		ans+=x-1;
	}
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...