Submission #783014

#TimeUsernameProblemLanguageResultExecution timeMemory
783014Rafi22Monster Game (JOI21_monster)C++17
92 / 100
97 ms256 KiB
#include <bits/stdc++.h> #include "monster.h" using namespace std; #define endl '\n' #define st first #define nd second #define pb push_back #define sz(x) (int)(x).size() #define all(x) (x).begin(), (x).end() #define ll long long ll mod=1000000007; int inf=1000000007; ll infl=1000000000000000007; /* const int N=1007; int p[N]; bool Query(int a, int b) { if(abs(p[a]-p[b])==1) return p[a]<p[b]; else return p[a]>p[b]; }*/ bool ok[1007]; vector<int>Solve(int n) { memset(ok,0,sizeof ok); vector<int>V(n); for(int i=0;i<n;i++) V[i]=i; stable_sort(all(V),Query); reverse(all(V)); for(int b=0;b<4;b++) { if(b+4<n&&Query(V[b],V[b+2])&&Query(V[b+1],V[b+3])&&Query(V[b+2],V[b+4])) { ok[b]=1; ok[b+1]=1; ok[b+2]=1; ok[b+3]=1; ok[b+4]=1; int l=b+5; for(int j=b+3;j+2<n;j++) { if(!Query(V[j],V[j+2])) break; ok[j+2]=1; l++; } reverse(V.begin()+b,V.begin()+l); } } int A=-1,B=-1; for(int i=0;i<min(n,10);i++) { int c=0; for(int j=0;j<min(n,10);j++) if(i!=j) c+=Query(V[i],V[j]); if(c==1) { if(A==-1) A=i; else B=i; } } if(Query(V[A],V[B])) reverse(V.begin(),V.begin()+A+1); else reverse(V.begin(),V.begin()+B+1); for(int i=1;i<n;i++) { if(ok[i]) continue; for(int j=i;j<n;j++) { if(Query(V[i-1],V[j])) { reverse(V.begin()+i,V.begin()+j+1); break; } } } vector<int>ans(n,0); for(int i=0;i<n;i++) ans[V[i]]=i; return ans; } /* void Case1(int n) { for(int i=0;i<n;i++) cin>>p[i]; vector<int>V=Solve(n); for(auto x:V) cout<<x<<" "; } bool Case(int n) { for(int i=0;i<n;i++) p[i]=i; random_shuffle(p,p+n); vector<int>V=Solve(n); bool is=1; for(int i=0;i<n;i++) if(p[i]!=V[i]) is=0; if(!is) { for(auto x:V) cout<<x<<" "; cout<<endl; } return is; } int main() { int n; cin>>n; // Case1(n); while(true) { if(!Case(n)) break; } for(int i=0;i<n;i++) cout<<p[i]<<" "; cout<<endl; return 0; } */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...