Submission #250036

#TimeUsernameProblemLanguageResultExecution timeMemory
250036ernestvwMechanical Doll (IOI18_doll)C++11
6 / 100
117 ms11772 KiB
#include <bits/stdc++.h> using namespace std; #define sz(x) ((int)x.size()) #define terminate blabliblou void answer(vector<int> C, vector<int> X, vector<int> Y); int n, m; vector<int> a; vector<vector<int>> adj; int p = 0; vector<int> c, x, y; int new_switch(int g, int d, bool b = 0) { p++; if(b)return -p; x.push_back(g); y.push_back(d); return -p; } int new_switch(int g) { p++; x.push_back(-p); y.push_back(g); return -p; } int liste[300000]; int PR = 1; int mom = -1; void terminate() { answer(vector<int>(),vector<int>(),vector<int>()); exit(0); } int build(int X, int pr) { if(pr == 1) { mom = new_switch(0, 0,1); int g = build(X, 2 * pr); int d = build(X + pr, 2 * pr); //x[-mom-1] = build(X, 2 * pr); //y[-mom-1] = build(X + pr, 2 * pr); return mom; } if(p > 10000000) terminate(); if(pr == PR) return (liste[X] == -1 ? mom : liste[X]); int g = build(X, 2 * pr); int d = build(X + pr, 2 * pr); return new_switch(g, d,1); } int create(int t) { if(sz(adj[t]) == 0) return 0; if(sz(adj[t]) == 1) return adj[t][0]; if(sz(adj[t]) == 2) return new_switch(adj[t][0], adj[t][1]); int pr = 1; while(pr < sz(adj[t])) pr *= 2; PR = pr; for(int i = 0; i < pr - sz(adj[t]); ++i) liste[i] = -1; for(int i = pr - sz(adj[t]); i < pr; ++i) liste[i] = adj[t][i - pr + sz(adj[t])]; return build(0, 1); } /*int Create(int t, int i, int j) { if(i > j) return 0; if(i == j) return adj[t][i]; if(i + 2 == j) { int p1 = new_switch(adj[t][i], adj[t][i + 1]); int p2 = new_switch(-p-2, adj[t][i + 2]); return new_switch(p1, p2); } if(i + 3 == j) return new_switch(new_switch(adj[t][i], adj[t][i + 2]), new_switch(adj[t][i + 1], adj[t][i + 3])); return new_switch(create(t, i, (i + j) / 2), create(t, (i + j) / 2 + 1, j)); }*/ void create_circuit(int M, vector<int> A) { n = (int)A.size(); m = M; a = A; c.assign(m + 1, 0); adj.assign(m + 1, vector<int>()); for(int i = 0; i < n - 1; ++i) adj[a[i]].push_back(a[i + 1]); adj[0].push_back(a[0]); adj[a.back()].push_back(0); /* for(int i = 0; i <= m; ++i) { cout << i << ": "; for(int j : adj[i])cout<<j<<" "; cout<<endl; } */ for(int i = 0; i <= m; ++i) c[i] = create(i); answer(c, x, y); }

Compilation message (stderr)

doll.cpp: In function 'int build(int, int)':
doll.cpp:43:7: warning: unused variable 'g' [-Wunused-variable]
   43 |   int g = build(X, 2 * pr);
      |       ^
doll.cpp:44:12: warning: unused variable 'd' [-Wunused-variable]
   44 |        int d = build(X + pr, 2 * pr);
      |            ^
#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...