Submission #952701

#TimeUsernameProblemLanguageResultExecution timeMemory
952701kilkuwuLibrary (JOI18_library)C++17
0 / 100
31 ms696 KiB
#include <bits/stdc++.h> #ifndef LOCAL #include "library.h" #else #include <vector> int Query(const std::vector<int>& M); void Answer(const std::vector<int>& res); #endif void Solve(int N) { std::vector<int> dp(N + 1, -1); auto get_pref = [&](int x) { if (dp[x] != -1) return dp[x]; std::vector<int> a(N); for (int i = 0; i < x; i++) { a[i] = 1; } return Query(a); }; auto get_pref_more = [&](int x, int y) { std::vector<int> a(N); a[y - 1] = 1; for (int i = 0; i < x; i++) { a[i] = 1; } return Query(a); }; auto get_pref_more_not = [&](int x, int y, int z) { std::vector<int> a(N); a[y - 1] = 1; for (int i = 0; i < x; i++) { a[i] = 1; } a[z] = 0; return Query(a); }; std::vector<std::vector<int>> adj(N + 1); dp[1] = 1; for (int i = 2; i <= N; i++) { if (get_pref(i) - get_pref(i - 1) == 1) { continue; } if (get_pref(i) - get_pref(i - 1) == 0) { int lb = 1, rb = i - 1; while (lb < rb) { int mid = (lb + rb) / 2; int bef = get_pref(mid); int aft = get_pref_more(mid, i); if (aft - bef == 0) { rb = mid; } else { lb = mid + 1; } } adj[rb].push_back(i); adj[i].push_back(rb); continue; } assert(get_pref(i) - get_pref(i - 1) == -1); int lb = 1, rb = i - 1; while (lb < rb) { int mid = (lb + rb) / 2; int bef = get_pref(mid); int aft = get_pref_more(mid, i); if (aft - bef == -1) { // now we can be sure rb = mid; } else { lb = mid + 1; } } int z = rb; adj[z].push_back(i); adj[i].push_back(z); lb = 1, rb = z - 1; // z - 1 while (lb < rb) { int mid = (lb + rb) / 2; int bef = get_pref(mid); int aft = get_pref_more(mid, i); if (aft - bef == 0) { rb = mid; } else { lb = mid + 1; } } adj[rb].push_back(i); adj[i].push_back(rb); } std::vector<int> res; std::function<void(int, int)> dfs = [&](int u, int p) { res.push_back(u); for (int v : adj[u]) { if (v == p) continue; dfs(v, u); } }; for (int i = 1; i <= N; i++) { if ((int) adj[i].size() == 1) { dfs(i, i); break; } } Answer(res); }

Compilation message (stderr)

library.cpp: In function 'void Solve(int)':
library.cpp:33:8: warning: variable 'get_pref_more_not' set but not used [-Wunused-but-set-variable]
   33 |   auto get_pref_more_not = [&](int x, int y, int z) {
      |        ^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...