Submission #795799

#TimeUsernameProblemLanguageResultExecution timeMemory
795799peijarMonster Game (JOI21_monster)C++17
0 / 100
72 ms448 KiB
#include "monster.h" #include <bits/stdc++.h> using namespace std; // a beaten by b bool comp(int a, int b) { return Query(b, a); } vector<int> merge_sort(vector<int> vec) { if (vec.size() == 1) return vec; vector<int> l, r; for (int i = 0; i < (int)vec.size(); ++i) { if (i % 2) r.push_back(vec[i]); else l.push_back(vec[i]); } l = merge_sort(l); r = merge_sort(r); merge(l.begin(), l.end(), r.begin(), r.end(), vec.begin(), comp); return vec; } vector<int> Solve(int N) { vector<int> sorted(N); iota(sorted.begin(), sorted.end(), 0LL); sorted = merge_sort(sorted); vector<int> debut; for (int i = 0; i < min(N, 10); ++i) debut.push_back(sorted[i]); int nbDebut = debut.size(); vector<int> cntWins(nbDebut); for (int i = 0; i < nbDebut; ++i) for (int j = i + 1; j < nbDebut; ++j) { if (comp(i, j)) cntWins[j]++; else cntWins[i]++; } int valMin = *min_element(cntWins.begin(), cntWins.end()); vector<int> withVal; for (int i = 0; i < nbDebut; ++i) if (cntWins[i] == valMin) withVal.push_back(i); assert(withVal.size() == 2); int posMin = comp(withVal[0], withVal[1]) ? withVal[1] : withVal[0]; vector<int> newSorted; newSorted.push_back(posMin); for (int x : sorted) if (x != posMin) newSorted.push_back(x); sorted = move(newSorted); for (int deb = 1; deb < N;) { int fin = deb; while (comp(sorted[deb - 1], sorted[fin])) ++fin; reverse(sorted.begin() + deb, sorted.begin() + fin + 1); deb = fin + 1; } vector<int> T(N); for (int i = 0; i < N; i++) T[sorted[i]] = i; return T; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...