Submission #994844

#TimeUsernameProblemLanguageResultExecution timeMemory
994844NintsiChkhaidzeLibrary (JOI18_library)C++17
19 / 100
214 ms592 KiB
#include "library.h" #include <bits/stdc++.h> #define ll long long #define ull unsigned long long using namespace std; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); ll rnd(ll B) { return (ull)rng() % B; } int n; bool check(int x,int y){ vector <int> M(n); M[x] = 1; M[y] = 1; return (Query(M) == 1); } void Solve(int N){ n = N; vector<int> ans(N),fix(N),del(N); for(int i = 0; i < N; i++) { ans[i] = fix[i] = 0; } int l = 0,r = N - 1; while (l <= r){ int tot = 0; vector <int> M(N); for (int i = 0; i < N; i++) { M[i] = 1; del[i] = 0; if (fix[i]) M[i] = 0,del[i] = 1; else ++tot; } if (l == r){ for (int i=0;i<N;i++){ if (M[i]) { ans[l] = i; break; } } break; } int cnt = 0; while (tot > 0){ int k; while (1){ k = rnd(N); if (del[k]) continue; break; } del[k] = 1; tot -= 1; M[k] = 0; if (Query(M) == 1){ ++cnt; if (cnt == 1) ans[l] = k; else ans[r] = k; fix[k] = 1; } if (cnt == 2) break; M[k] = 1; } if (l && !check(ans[l - 1],ans[l])){ swap(ans[l],ans[r]); } l += 1; r -= 1; } for (int i=0;i<N;i++) ans[i] += 1; Answer(ans); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...