Submission #96845

#TimeUsernameProblemLanguageResultExecution timeMemory
96845KastandaICC (CEOI16_icc)C++11
61 / 100
187 ms632 KiB
// I do it for the glory #include<bits/stdc++.h> #include "icc.h" #define pb push_back using namespace std; mt19937 Rnd(chrono::steady_clock::now().time_since_epoch().count()); int fe, se; bool Rand() { return (Rnd() & 1); } void GoForIt(vector < int > L, vector < int > R) { int cnt = 0; while (L.size() > 1) { vector < int > L1, L2; shuffle(L.begin(), L.end(), Rnd); for (int i = 0; i < (int)L.size(); i++) { if (i < ((int)L.size() >> 1)) L1.pb(L[i]); else L2.pb(L[i]); } cnt ++; bool w = query(L1.size(), R.size(), L1.data(), R.data()); if (w) L = L1; else L = L2; } while (R.size() > 1) { vector < int > R1, R2; shuffle(R.begin(), R.end(), Rnd); for (int i = 0; i < (int)R.size(); i++) { if (i < ((int)R.size() >> 1)) R1.pb(R[i]); else R2.pb(R[i]); } cnt ++; bool w = query(L.size(), R1.size(), L.data(), R1.data()); if (w) R = R1; else R = R2; } assert(cnt <= 13); fe = L[0]; se = R[0]; return ; } void run(int N) { int P[N + 1]; vector < int > A[N + 1]; for (int i = 1; i <= N; i++) A[i].pb(i), P[i] = i; for (int q = 1; q <= N - 1; q ++) { bool done = 0; vector < int > L, R; while (!done) { L.clear(); R.clear(); int cl = 0, cr = 0; for (int i = 1; i <= N; i++) { if (!A[i].size()) continue; bool w = Rand(); if (w) cl ++; else cr ++; for (int v : A[i]) { if (w) L.pb(v); else R.pb(v); } } if (!L.size() || !R.size()) continue; // What are the odds of that ? if (abs(cl - cr) > 2) continue; done = query(L.size(), R.size(), L.data(), R.data()); } GoForIt(L, R); setRoad(fe, se); int v = fe, u = se, pu = P[u]; for (int w : A[pu]) P[w] = P[v], A[P[v]].pb(w); A[pu].clear(); } return ; }
#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...