Submission #893299

#TimeUsernameProblemLanguageResultExecution timeMemory
893299boxLibrary (JOI18_library)C++17
100 / 100
243 ms688 KiB
#include <bits/stdc++.h> using namespace std; #define ar array #define sz(v) int(std::size(v)) using i64 = long long; using pii = pair<int, int>; #include "library.h" void Solve(int n) { if (n == 1) { Answer({1}); return; } vector<pii> edges; auto expected = [&](vector<int> v) { int save = 0; for (auto [i, j] : edges) save += v[i] && v[j]; return count(begin(v), end(v), 1) - save; }; for (int rep = 0; rep < n - 1; rep++) { int low = 0, hi = n - 1; while (low < hi) { int mid = (low + hi) / 2; vector<int> v(n); fill(begin(v), begin(v) + mid + 1, 1); Query(v) < expected(v) ? hi = mid : low = mid + 1; } int x = low; low = 0, hi = x - 1; while (low < hi) { int mid = (low + hi) / 2 + 1; vector<int> v(n); fill(begin(v) + mid, begin(v) + x + 1, 1); Query(v) < expected(v) ? low = mid : hi = mid - 1; } edges.push_back({low, x}); } vector<vector<int>> adj(n); for (auto [i, j] : edges) adj[i].push_back(j), adj[j].push_back(i); int src = -1; for (int i = 0; i < n; i++) if (sz(adj[i]) == 1) src = i; vector<int> ans{{src, adj[src][0]}}; while (sz(ans) < n) ans.push_back(adj[end(ans)[-1]][0] ^ adj[end(ans)[-1]][1] ^ end(ans)[-2]); for (int &x : ans) x++; Answer(ans); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...