Submission #815790

#TimeUsernameProblemLanguageResultExecution timeMemory
815790Lobo자동 인형 (IOI18_doll)C++17
100 / 100
54 ms16820 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;
	vector<int> next;
	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);
		next.pb(v);
	}

	int cnt = 1;
	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++;
		}
		mult = -1;

		next = newnext;
	}

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

	for(int i = 0; i <= m; i++) {
		c[i] = -next[0];
	}


	// 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++;
	// 		}
	// 		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:34:7: warning: variable 'u' set but not used [-Wunused-but-set-variable]
   34 |   int u,v;
      |       ^
doll.cpp:49:20: 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]
   49 |   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...