Submission #237827

#TimeUsernameProblemLanguageResultExecution timeMemory
237827JatanaMechanical Doll (IOI18_doll)C++17
Compilation error
0 ms0 KiB
#include "doll.h"
#include <iostream>

#define le(v) ((int)v.size())
#define pb push_back
using namespace std;

vector<int> X, Y;

int go(int depth) {
	int id = le(X);
	X.pb(-1e9); Y.pb(-1e9);
	if (depth > 0) {
		X[id] = go(depth - 1);
		Y[id] = go(depth - 1);
	}
	return -(id + 1);
}

void create_circuit(int M, vector<int> A) {
	X.clear(); Y.clear();
	int N = A.size();
	vector<vector<int>> after(M + 1);
	vector<int> wait(M + 1);
	A.pb(0);
	for (int i = 0; i < le(A) - 1; i++) {
		after[A[i]].pb(A[i + 1]);
	}	
	A.pop_back();
	vector<int> C(M + 1);
	C[0] = A[0];
	for (int i = 1; i <= M; i++) {
		if (!after[i].empty()) {
			if (le(after[i]) == 1) {
				C[i] = after[i][0];
			} else {
				int sz = le(after[i]);
				int t = ((31 - __builtin_clz(sz)));
				if ((1 << t) < sz) t++;
				wait[i] = (1 << t) - sz;
				C[i] = go(t - 1);
			}
		}
		reverse(after[i].begin(), after[i].end());
	}
	int cur = C[0];
	int real = -1;
	while (cur) {
		// cerr << cur << " ";
		if (cur > 0) {
			real = cur;
			cur = C[cur];
		}	else {
			cur = (-cur) - 1;
			if (X[cur] == -1e9) {
				if (wait[real]) {
					wait[real]--;
					X[cur] = C[real];
				} else {
					X[cur] = after[real].back();
					after[real].pop_back();
				}
			}
			swap(X[cur], Y[cur]);
			cur = Y[cur];
		}
	}
	answer(C, X, Y);
}

Compilation message (stderr)

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:44:3: error: 'reverse' was not declared in this scope
   44 |   reverse(after[i].begin(), after[i].end());
      |   ^~~~~~~
doll.cpp:22:6: warning: unused variable 'N' [-Wunused-variable]
   22 |  int N = A.size();
      |      ^