Submission #1189736

#TimeUsernameProblemLanguageResultExecution timeMemory
1189736Double_SlashChameleon's Love (JOI20_chameleon)C++20
100 / 100
25 ms496 KiB
#include "chameleon.h" #include <bits/stdc++.h> using namespace std; #define all(x) x.begin(), x.end() vector<int> adj[1001]; int nxt[1001]; int dnc(int i, vector<int>::iterator l, vector<int>::iterator r) { if (r - l == 1) return *l; auto m = l + (r - l) / 2; vector<int> arr(l, m); arr.emplace_back(i); if (Query(arr) < arr.size()) return dnc(i, l, m); else return dnc(i, m, r); } void recurse(const vector<int> &arr) { if (arr.size() <= 1) return; vector<int> a, b; for (int i: arr) { a.emplace_back(i); if (a.size() > 1 and Query(a) < a.size()) { a.pop_back(); b.emplace_back(i); } } for (int i: b) { for (vector<int> cur = a; not cur.empty();) { int j = dnc(i, all(cur)); adj[i].emplace_back(j); adj[j].emplace_back(i); cur.erase(find(all(cur), j)); cur.emplace_back(i); if (Query(cur) == cur.size()) break; cur.pop_back(); } } recurse(b); } void Solve(int N) { vector<int> arr(N << 1); iota(all(arr), 1); recurse(arr); for (int i = 1; i <= N * 2; ++i) { if (adj[i].size() != 3) continue; if (Query({i, adj[i][0], adj[i][1]}) == 1) nxt[i] = adj[i][2]; else if (Query({i, adj[i][0], adj[i][2]}) == 1) nxt[i] = adj[i][1]; else nxt[i] = adj[i][0]; adj[i].erase(find(all(adj[i]), nxt[i])); } for (int i = 1; i <= N * 2; ++i) { if (nxt[i]) adj[nxt[i]].erase(find(all(adj[nxt[i]]), i)); } for (int i = 1; i <= N * 2; ++i) { if (adj[i][0] > i) Answer(i, adj[i][0]); } }
#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...