Submission #1272807

#TimeUsernameProblemLanguageResultExecution timeMemory
1272807ortsacToxic Gene (NOI23_toxic)C++20
28.40 / 100
9 ms576 KiB
#include "toxic.h" #include <bits/stdc++.h> using namespace std; #define pii pair<int, int> #define fr first #define se second mt19937 rng(chrono::system_clock::now().time_since_epoch().count()); int cnt = 0; vector<int> gRange(int l, int r) { vector<int> a; for (int i = l; i <= r; i++) a.push_back(i); return a; } bool good(int l, int r) { return (query_sample(gRange(l, r)) == (r - l + 1)); } vector<int> toxics; void doIt(int l, int r) { if (l == r) { toxics.push_back(l); return; } int m = (l + r)/2; vector<pii> ra = {{l, m}, {m + 1, r}}; shuffle(ra.begin(), ra.end(), rng); cnt++; if (good(ra[0].fr, ra[0].se)) { doIt(ra[1].fr, ra[1].se); // ok } else { cnt++; doIt(ra[0].fr, ra[0].se); if (!good(ra[1].fr, ra[1].se)) doIt(ra[1].fr, ra[1].se);; } } void determine_type(int n) { cnt = 0; toxics.clear(); doIt(1, n); vector<int> tx(301); for (auto u : toxics) { tx[u] = 1; answer_type(u, 'T'); } vector<int> test; for (int i = 1; i <= n; i++) { if (!tx[i]) test.push_back(i); } while (!test.empty()) { vector<int> curr; while (!test.empty() && (((int) curr.size()) < 8)) { curr.push_back(test.back()); test.pop_back(); } vector<int> batch = {toxics[0]}; for (int i = 0; i < ((int) curr.size()); i++) { int qtd = (1 << i); while (qtd--) batch.push_back(curr[i]); } int r = query_sample(batch); for (int i = 0; i < ((int) curr.size()); i++) { if (r & (1 << i)) { answer_type(curr[i], 'S'); } else { answer_type(curr[i], 'R'); } } } return; }
#Verdict Execution timeMemoryGrader output
Fetching results...