제출 #1331151

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

const int MAXN = 3e5;

int N;
bool B[MAXN];
vector <int> C, X, Y;

void create_circuit(int M,vector<int> A) {
	A.push_back(0);
	N = A.size();
	while (N > 1) {
		for (int i=0;i<((N+1)>>1);i++) {
			Y.push_back(~(Y.size()-N+i));
			X.push_back(~(Y.size()-N+i));
		}
		if (N&1) {
			X[X.size()-1] = MAXN;
		}
		N = (N+1)>>1;
	}
	N = 0;
	while (N < A.size()) {
		int i = X.size()-1;
		while (true) {
			if (B[i]^=1) {
				if (X[i] == MAXN) {
					X[i] = -X.size();
					break;
				}
				if (X[i] >= 0) {
					X[i] = A[N];
					N++;
					break;
				}
				i = ~X[i];
			}
			else {
				if (Y[i] >= 0) {
					Y[i] = A[N];
					N++;
					break;
				}
				i = ~Y[i];
			}
		}
	}
	for (int i=0;i<=M;i++) {
		C.push_back(-X.size());
	}
	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...