Submission #1150163

#TimeUsernameProblemLanguageResultExecution timeMemory
1150163IssaMonster Game (JOI21_monster)C++20
100 / 100
23 ms412 KiB
#include "monster.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; #define ent "\n" const int maxn = 2e5 + 100; const ll INF = (ll)1e18 + 100; const int inf = 1e7 + 100; const ll MOD = 1e9 + 7; const int maxl = 16; const ll P = 31; mt19937 rng(667); std::vector<int> Solve(int N) { vector<int> v; vector<int> ans(N, 0); for(int i = 0; i < N; i++){ v.push_back(i); } shuffle(v.begin(), v.end(), rng); for(int i = 1; i < v.size(); i++){ int j = i; for(int l = 0, r = i - 1; l <= r;){ int mid = (l + r) >> 1; if(Query(v[i], v[mid])) l = mid + 1; else r = mid - 1, j = mid; } for(int k = i; k > j; k--){ swap(v[k], v[k-1]); } } vector<pii> s; int k = min((int)10, (int)v.size()); for(int i = 0; i < k; i++){ s.push_back({0, i}); for(int j = 0; j < k; j++){ if(i == j) continue; s.back().first += Query(v[i], v[j]); } } sort(s.begin(), s.end()); int st = s[0].second; if(!Query(v[st], v[s[1].second])) st = s[1].second; reverse(v.begin(), v.begin() + st + 1); for(int i = st; i + 1 < N;){ int j = i + 1; while(!Query(v[i], v[j])) j++; reverse(v.begin() + i + 1, v.begin() + j + 1); i = j; } for(int i = 0; i < N; i++){ ans[v[i]] = i; } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...