Submission #1146351

#TimeUsernameProblemLanguageResultExecution timeMemory
1146351hmm789Monster Game (JOI21_monster)C++20
89 / 100
35 ms1088 KiB
#include "monster.h" #include <bits/stdc++.h> using namespace std; map<pair<int, int>, int> mp; bool query(int a, int b) { if(mp.count({a,b})) return mp[{a,b}]; else if(mp.count({b,a})) return !mp[{b,a}]; else return mp[{a,b}] = Query(a, b); } vector<int> Solve(int N) { vector<int> a(N), ans(N), opp; int mx, prv = 0; for(int i = 0; i < N; i++) a[i] = i; stable_sort(a.begin(), a.end(), query); for(int i = 1; i < N; i++) if(query(a[i], a[0])) opp.push_back(i); if(opp.size() == 1) { int cnt = 0; for(int i = 0; i < N; i++) if(i != 1) if(query(a[i], a[1])) cnt++; if(cnt == 1) mx = 1; else mx = 0; } else { mx = opp[opp.size()-2]; } reverse(a.begin(), a.begin()+mx+1); while(mx < N) { int idx = mx+1; while(idx < N && query(a[mx], a[idx])) idx++; prv = mx+1; mx = idx; reverse(a.begin()+prv, a.begin()+min(N, mx+1)); } for(int i = 0; i < N; i++) ans[a[i]] = N-i-1; return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...