Submission #913107

#TimeUsernameProblemLanguageResultExecution timeMemory
913107vjudge1Mouse (info1cup19_mouse)C++17
0 / 100
1 ms344 KiB
#include <bits/stdc++.h> #include "grader.h" using namespace std; int n; int ask(const vector<int> &q) { int x = query(q); if (x == n) { exit(0); } return x; } mt19937 rng(123123); void solve(int n) { ::n = n; vector<int> a(n); iota(a.begin(), a.end(), 1); int cur = ask(a); vector<int> done(n); for (int i = 0; i < n; i++) { if (done[i]) continue; swap(a[0], a[i]); int x = ask(a); swap(a[0], a[i]); if (x == cur - 2) { continue; } vector<int> ord; for (int j = i + 1; j < n; j++) { if (!done[j]) ord.emplace_back(j); } shuffle(ord.begin(), ord.end(), rng); bool might_done = 0; int last_done = -1; for (int j : ord) { swap(a[i], a[j]); int tmp = ask(a); if (tmp - cur == 2) { done[j] = 1; cur = tmp; break; } else if (tmp - cur == 1) { cur = tmp; // a[i] = j || a[j] = i if (might_done) done[last_done] = 1; might_done = 1; last_done = j; } else if (tmp == cur) { // a[i] != j && a[i] != i && a[j] != i && a[j] != j if (might_done) done[last_done] = 1; might_done = 0; swap(a[i], a[j]); } else if (tmp - cur == -1) { // tmp < cur // a[i] = i || a[j] = j swap(a[i], a[j]); if (might_done == 0) { done[j] = 1; } else { break; } } else { done[j] = 1; swap(a[i], a[j]); break; } } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...