제출 #1286180

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

vector<int> ord(int n){
	if (n == 1) return {1};
	vector<int> a = ord(n / 2), ans;
	for (auto i : a){
		ans.push_back(i);
		ans.push_back(i + n / 2);
	}
	return ans;
}

void create_circuit(int M, vector<int> A) {
	// A.push_back(0);
	int N = A.size()+1;
	int p = 1;
	while (p < N) p *= 2;
	vector<int> O = ord(p);
	
	vector<int> C(M + 1, -1), X(2 * p - 1), Y(2 * p - 1);
	deque<int> leaves = {-1};
	
	while (leaves.size() && -2 * leaves.front() <= 2 * p - 1){
		int x = -leaves.front();
		leaves.pop_front();
		X[x - 1] = -(2 * x);
		Y[x - 1] = -(2 * x + 1);
		leaves.push_back(-(2 * x));
		leaves.push_back(-(2 * x + 1));
	}
	for(auto &i:O){
		i += p-1;
		// cout<<i<<' ';
	}
	for (int i = 0; i < p; i++){
		X[O[i]-1]=-O[i];
		if(i<N-1) Y[O[i]-1]=A[i];
		else Y[O[i]-1]=-1;
	}
	X[2*p-2]=-(2*p-1);
	Y[2*p-2]=0;
	// for(int i=0;i<2*p-1;i++){
		// cout<<-i-1<<' '<<X[i]<<' '<<Y[i]<<endl;
	// }
	
	answer(C,X,Y);
	
}

// int main(){
	// create_circuit(4, {1, 2, 1, 3});
// }
#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...