Submission #807687

#TimeUsernameProblemLanguageResultExecution timeMemory
807687LoboMechanical Doll (IOI18_doll)C++17
85.55 / 100
92 ms17640 KiB
#include "doll.h"
#include<bits/stdc++.h>
using namespace std;
#define fr first
#define sc second
#define mp make_pair
#define pb push_back
#define all(x) x.begin(),x.end()
#define int long long

const int inf = 1e18+10;
const int maxn = 2e5+10;

int n, m;
vector<int> g[maxn];

void create_circuit(int32_t M, std::vector<int32_t> A) {
	// int N = A.size();
	// std::vector<int> C(M + 1);
	// C[0] = -1;
	// for (int i = 1; i <= M; ++i) {
	// C[i] = 1;
	// }
	// std::vector<int> X(N), Y(N);
	// for (int k = 0; k < N; ++k) {
	// X[k] = Y[k] = A[k];
	// }
	// answer(C, X, Y);
	n = A.size();
	m = M;
	vector<int32_t> c(m+1),x,y;
	for(int i = -1; i < n; i++) {
		int u,v;
		if(i == -1) u = 0, v = A[0];
		else if(i == n-1) u = A[n-1], v = 0;
		else u = A[i], v = A[i+1];

		g[u].pb(v);
	}
	int cnt = 1;
	for(int i = 0; i <= m; i++) {
		if(g[i].size() == 0) {
			c[i] = i;
			continue;
		}
		if(g[i].size() == 1) {
			c[i] = g[i][0];
			continue;
		}

		vector<int> next = g[i];
		vector<int> liga;
		int mult = 1;
		while(next.size() > 1) {
			vector<int> newnext;

			for(int i = 0; i < next.size()/2; i++) {
				newnext.pb(cnt);
				x.pb(mult*next[i]);
				y.pb(mult*next[i+next.size()/2]);
				cnt++;
			}
			if(next.size()%2 == 1) {
				newnext.pb(cnt);
				y.pb(mult*next.back());
				x.pb(0);
				liga.pb(cnt);
				cnt++;
			}

			// while(next.size()) {
			// 	newnext.pb(cnt);
			// 	x.pb(mult*next.back());
			// 	next.pop_back();
			// 	y.pb(mult*next.back());
			// 	next.pop_back();
			// 	cnt++;
			// }

			mult = -1;

			next = newnext;
		}

		for(auto v : liga) {
			x[v-1] = -next[0];
		}

		c[i] = -next[0];

		// cout << i << " " << c[i] << " " << cnt << endl;
	}

	// for(int i = 0; i <= m; i++) {
	// 	cout << i << " -> " << c[i] << endl;
	// }

	// for(int i = 0; i < x.size(); i++) {
	// 	cout << -(i+1) << " -> " << x[i] << " " << y[i] << endl;
	// }

	answer(c,x,y);
}

Compilation message (stderr)

doll.cpp: In function 'void create_circuit(int32_t, std::vector<int>)':
doll.cpp:57:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |    for(int i = 0; i < next.size()/2; i++) {
      |                   ~~^~~~~~~~~~~~~~~
#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...