Submission #140193

#TimeUsernameProblemLanguageResultExecution timeMemory
140193ggoh곤돌라 (IOI14_gondola)C++14
100 / 100
95 ms6776 KiB
#include "gondola.h"
#include <bits/stdc++.h>

int i;
struct A{
    int val,ind;
}data[100005];
bool cmp(A aa,A bb){return aa.val<bb.val;}

long long X=1e9+9;
long long f(long long p,long long q)
{
    if(q==0)return 1ll;
    if(q==1)return p;
    long long O=f(p,q/2);
    O=O*O%X;
    if(q%2)return O*p%X;
    return O;
}

int valid(int n, int inputSeq[])
{
    int ST=-1,st,C=1;
    std::map<int,int>ch;
    for(i=0;i<n;i++)
    {
      if(ch[inputSeq[i]]==1){C=0;break;}
      ch[inputSeq[i]]=1;
    }
    for(i=0;i<n;i++)
    {
        if(inputSeq[i]<=n)
        {
            st=i-inputSeq[i]+1;st=(st+n)%n;
            if(ST==-1)ST=st;
            else if(ST!=st){C=0;break;}
        }
    }
    return C;
}

//----------------------

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
    int ST=0,ba,sz=0,ans=0;
    for(i=0;i<n;i++)
    {
        if(gondolaSeq[i]<=n)ST=(i-gondolaSeq[i]+1+n)%n;
        else data[sz++]={gondolaSeq[i],i};
    }
    std::sort(data,data+sz,cmp);
    ba=n;
    for(i=0;i<sz;i++)
    {
        replacementSeq[ans++]=(data[i].ind-ST+n)%n+1;
        for(int j=ba+1;j<data[i].val;j++)
        {
            replacementSeq[ans++]=j;
        }
        ba=data[i].val;
    }
    return ans;
}

//----------------------

int countReplacement(int n, int inputSeq[])
{
    if(valid(n,inputSeq)==0)return 0;
    int ST=-1,ba,sz=0;
    long long ans=1ll;
    for(i=0;i<n;i++)
    {
        if(inputSeq[i]<=n)ST=(i-inputSeq[i]+1+n)%n;
        else data[sz++]={inputSeq[i],i};
    }
    if(ST==-1)ST=0,ans*=n;
    std::sort(data,data+sz,cmp);
    ba=n;
    for(i=0;i<sz;i++)
    {
        ans*=f(sz-i,data[i].val-ba-1);
        ans%=X;
        ba=data[i].val;
    }


    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...