Submission #1319086

#TimeUsernameProblemLanguageResultExecution timeMemory
1319086Jawad_Akbar_JJMouse (info1cup19_mouse)C++20
36.67 / 100
61 ms420 KiB
#include <iostream> #include <vector> #include <random> #include <chrono> #include <algorithm> #include "grader.h" using namespace std; mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count()); const int N = 500; int seen[N], p[N], num; int ask(vector<int> v, int i, int j){ num++; // if (num > 20) // exit(0); swap(v[i], v[j]); i = query(v); if (i == v.size()) exit(0); return query(v); } void solve(int n){ vector<int> ind, val; for (int i=0;i<n;i++){ ind.push_back(i); val.push_back(i+1); } // shuffle(begin(val), end(val), rnd); int cur = ask(val, 1, 1); while (cur < n){ // cout<<cur<<endl; while (ind.size() > 0 and seen[ind[0]]) ind.erase(begin(ind)); for (int i=1;i<ind.size();i++){ if (seen[ind[0]] or seen[ind[i]]) continue; int cur1 = ask(val, ind[0], ind[i]); if (cur1 == cur) continue; if (cur1 == cur - 2){ seen[ind[0]] = seen[ind[i]] = 1; } else if (cur1 == cur + 2){ seen[ind[0]] = seen[ind[i]] = 1; swap(val[ind[0]], val[ind[i]]); cur += 2; } else if (cur1 == cur - 1){ int j = 0; if (ind[0] == j or ind[i] == j) j++; if (ind[0] == j or ind[i] == j) j++; if (seen[j]){ if (ask(val, ind[0], j) == cur - 2) seen[ind[0]] = 1; else seen[ind[i]] = 1; } else{ int cur2 = ask(val, ind[0], j), cur3 = ask(val, ind[i], j); if (cur2 == cur or cur2 == cur - 1 and cur3 == cur - 2) seen[ind[i]] = 1; else seen[ind[0]] = 1; } } else{ swap(val[ind[0]], val[ind[i]]); cur++, i--; } } if (seen[ind[0]] == 0) return; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...