Submission #1141726

#TimeUsernameProblemLanguageResultExecution timeMemory
1141726WansurMechanical Doll (IOI18_doll)C++20
85.55 / 100
139 ms17108 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; const int maxn = 2e5 + 12; vector<int> g[maxn]; vector<int> x, y; int n, m; int nv; vector<int> find(vector<int> v) { if((int)v.size() <= 1) return v; vector<int> res, a, b; for(int i = 0; i < v.size(); i += 2) { a.push_back(v[i]); } for(int i = 1; i < v.size(); i += 2) { b.push_back(v[i]); } a = find(a), b = find(b); for(int x : a) { res.push_back(x); } for(int x : b) { res.push_back(x); } return res; } int upd(vector<int> v, int st) { bool fg = 1; for(int x : v) { if(x >= 0) { fg = 0; } } if(fg) return st; if((int)v.size() == 1) { return v[0]; } vector<int> a, b; int sz = (int)v.size() / 2; for(int i = 0; i < sz; i++) { a.push_back(v[i]); } for(int i = sz; i < 2 * sz; i++) { b.push_back(v[i]); } int u = (int)x.size(); if(st >= 0) st = -(u + 1); x.push_back(0), y.push_back(0); int L = upd(a, st), R = upd(b, st); x[u] = L, y[u] = R; return -(u + 1); } void create_circuit(int M, std::vector<int> a) { n = (int)a.size(); m = M; vector<int> c(m + 1); c[0] = a[0]; for(int i = 0; i < n - 1; i++) { g[a[i]].push_back(a[i + 1]); } g[a[n - 1]].push_back(0); for(int i = 1; i <= m; i++) { if((int)g[i].size() == 0) { continue; } if((int)g[i].size() == 1) { c[i] = g[i][0]; continue; } int t = 1; while(t < (int)g[i].size()) { t <<= 1; } int sz = t - (int)g[i].size(); vector<int> pos, vt; for(int j = 0; j < t; j++) { pos.push_back(j); vt.push_back(0); } pos = find(pos); int ptr = 0; for(int j = 0; j < sz; j++) { vt[j] = -1; } for(int j = 0; j < t; j++) { if(vt[pos[j]] < 0) continue; vt[pos[j]] = g[i][ptr]; ptr++; } c[i] = upd(vt, 0); } 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...