Submission #783002

#TimeUsernameProblemLanguageResultExecution timeMemory
783002Rafi22Monster Game (JOI21_monster)C++17
92 / 100
100 ms208 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+3<n&&Query(V[b],V[b+2])&&Query(V[b+1],V[b+3]))
        {
          //  ok[b]=1;
         //   ok[b+1]=1;
         //   ok[b+2]=1;
         //   ok[b+3]=1;
            int l=b+4;
            for(int j=b+2;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;
}

/*
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++) cin>>p[i];
    vector<int>V=Solve(n);
    for(auto x:V) cout<<x<<" ";
    cout<<endl;
    return 0;
}*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...