Submission #1136727

#TimeUsernameProblemLanguageResultExecution timeMemory
1136727danglayloi1Monster Game (JOI21_monster)C++20
92 / 100
27 ms428 KiB
#include <bits/stdc++.h> #include "monster.h" #define ii pair<int, int> #define fi first #define se second #define inf 0x3f3f3f3f3f3f3f3f using namespace std; using ll = long long; const ll mod=1e9+7; const int nx=1e3+5; // int a[10]; // bool Query(int x, int y) // { // if(abs(a[x]-a[y])==1) // return a[x]<a[y]; // return a[x]>a[y]; // } vector<int> cur; vector<int> Solve(int n) { cur.clear(); cur.emplace_back(0); for(int i = 1; i < n; i++) { int d=0, c=cur.size()-1, g, pos=cur.size(); while(d<=c) { g=(d+c)>>1; if(Query(cur[g], i)) pos=g, c=g-1; else d=g+1; } cur.insert(cur.begin()+pos, i); } int st; int win=0; for(int i = 0; i < n; i++) if(i!=cur[0]) win+=Query(cur[0], i); if(win==1) { int wii=0; for(int i = 0; i < n; i++) if(i!=cur[1]) wii+=Query(cur[1], i); if(wii==1) st=1; else st=0; } else if(win==n-2) { int wii=0; for(int i = 0; i < n; i++) if(i!=cur[1]) wii+=Query(cur[1], i); if(wii==n-2) st=n-1; else st=n-2; } else st=win; vector<int> res; res.resize(n); for(int i = 0; i <= st; i++) res[i]=st-i; ii p={0, st}; int base=st+1; for(int i = st+1; i < n; i++) { if(Query(cur[p.fi], cur[i])) { for(int j = i; j > p.se; j--) res[j]=base++; p={p.se+1, i}; } } vector<int> ans; ans.resize(n); for(int i = 0; i < n; i++) ans[cur[i]]=res[i]; return ans; } // int main() // { // ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // a[0]=3, a[1]=1, a[2]=4, a[3]=2, a[4]=0; // vector<int> tmp=Solve(5); // for(int c:tmp) // cout<<c<<' '; // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...