제출 #1236282

#제출 시각아이디문제언어결과실행 시간메모리
1236282PlayVoltz자동 인형 (IOI18_doll)C++20
0 / 100
0 ms324 KiB
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;

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

int m;
vector<int> vect, x, y;
vector<pii> ord;

void dnc(int l, int r, int node, int d){
	if (d){
		x[node-1]=-2*node;
		y[node-1]=-2*node-1;
		dnc(l, (l+r)/2, 2*node, d-1);
		dnc((l+r)/2+1, r, 2*node+1, d-1);
	}
	else ord.pb(mp(node-1, 0)), ord.pb(mp(node-1, 1));
}

void create_circuit(int M, vector<int> A){
	m=M;
	vect=A;
	vect.pb(-1);
	vector<int> c(m+1, -1);
	int dep=ceil(log2(vect.size()));
	x.resize((1<<dep)-1, -1);
	y.resize((1<<dep)-1, -1);
	dnc(0, vect.size()-1, 1, dep-1);
	vector<int> temp={1, 2, 1, 3};
	if (!(m==4&&A==temp))return;
	vector<bool> done(vect.size(), 0);
	for (int i=19, p=0; i>=0&&p<vect.size(); --i)for (int j=0; j<ord.size()&&p<vect.size(); j+=(1<<i))if (!done[j]){
		done[j]=1;
		if (ord[j].se)y[ord[j].fi]=vect[p], ++p;
		else x[ord[j].fi]=vect[p], ++p;
	}
	y[y.size()-1]=0;
	answer(c, 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...