Submission #1221886

#TimeUsernameProblemLanguageResultExecution timeMemory
1221886boclobanchatMechanical Doll (IOI18_doll)C++20
100 / 100
45 ms10764 KiB
#include"doll.h"
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+69;
bool ck[MAXN];
int val[MAXN],w[MAXN];
void create_circuit(int M,vector<int> A)
{
	A.push_back(0);
	int n=A.size(),lg=1,cnt=0,c=0;
	while(lg<n) lg*=2,c++;
	for(int i=lg-n+1;i<=lg;i++)
	{
		int pos=i+lg-1;
		while(pos) ck[pos]=true,pos/=2;
	}
	for(int i=1;i<lg*2;i++) if(ck[i]) val[i]=++cnt;
	vector<int> x,y,e;
	for(int i=0;i<=M;i++) e.push_back(-1);
	for(int i=1;i<lg;i++) if(ck[i])
	{
		if(!ck[i*2]) x.push_back(-1);
		else if(i*2<lg) x.push_back(-val[i*2]);
		else x.push_back(0);
		if(!ck[i*2+1]) y.push_back(-1);
		else if(i*2+1<lg) y.push_back(-val[i*2+1]);
		else y.push_back(0);
	}
	int it=0;
	for(int i=0;i<lg;i++) 
	{
		int v=i,res=0;
		for(int j=0;j<c;j++) res=res*2+v%2,v/=2;
		if(ck[res+lg])
		{
			if(res%2==0) x[val[(res+lg)/2]-1]=A[it++];
			else y[val[(res+lg)/2]-1]=A[it++];
		}
	}
	answer(e,x,y);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...