제출 #16455

#제출 시각아이디문제언어결과실행 시간메모리
16455atomzeno곤돌라 (IOI14_gondola)C++98
100 / 100
38 ms6360 KiB
#include "gondola.h"
#define MOD 1000000009
#include<algorithm>
using namespace std;
#define MX 200001
int d[MX],check[MX],D[MX];
int l,ind;
int valid(int n, int inputSeq[]){
    int i,cnt=0,ind;
    for(i=0;i<n;i++){check[i]=inputSeq[i];}
    sort(check,check+n);
    for(i=1;i<n;i++){
        if(check[i]==check[i-1]){return 0;}
    }
    for(i=0;i<n;i++){
        if(inputSeq[i]<=n){
            cnt=1;
            ind=(inputSeq[i]-1-i)+n;
            ind%=n;
            break;
        }
    }
    if(cnt==0){return 1;}
    for(i=0;i<n;i++){
        d[(ind+i)%n]=inputSeq[i];
    }
    for(i=0;i<n;i++){
        if(d[i]<=n&&d[i]!=(i+1)){
            return 0;
        }
    }
    return 1;
}
struct DT{
    int x,y;
    bool operator<(const DT&r)const{
        return r.x>x;
    }
}make[MX];
int replacement(int n, int gondolaSeq[], int replacementSeq[]){
    int ll=0,o=n,flag=0,indin,i,j;
    for(i=0;i<n;i++){
        if(gondolaSeq[i]<=n){
            flag=1;
            indin=gondolaSeq[i];
            break;
        }
    }
    if(flag==0){indin=1;}
    for(j=i;j<i+n;j++){
        make[j%n].x=gondolaSeq[j%n];
        if(indin>n){indin-=n;}
        make[j%n].y=indin++;
    }
    sort(make,make+n);
    for(i=0;i<n;){
        if(make[i].y>=make[i].x){
            i++;
            continue;
        }
        replacementSeq[ll++]=make[i].y;
        make[i].y=++o;
    }
    return ll;
}
long long int p,pp;
long long int a[33];
//----------------------
long long int calc(int x,int y){//x의 y승
    int i;
    a[0]=x%MOD;
    if(y==0){
        return 1;
    }
    for(i=1;i<=31;i++){
        if(((long long int)1<<i)>y){break;}
        p=(a[i-1]*a[i-1]);
        a[i]=p%MOD;
    }
    p=1;
    for(i=0;i<=31;i++){
        if(((long long int)1<<i)>y){break;}
        if((y&((long long int)1<<i))!=0){
            p=p*a[i];
            p=p%MOD;
        }
    }
    return p%MOD;
}
int countReplacement(int n, int inputSeq[]){
    int o=n,i,flag;
    long long int lll=0;
    pp=1;
    flag=0;
    lll=0;
    if(valid(n,inputSeq)==0){return 0;}
    for(i=0;i<n;i++){
        if(inputSeq[i]>n){
            D[lll++]=inputSeq[i];
        }
        else{flag=1;}
    }
    sort(D,D+lll);
    pp=1;
    for(i=0;i<lll;i++){
        pp=(pp*calc(lll-i,D[i]-o-1))%MOD;
        o=D[i];
        pp%=MOD;
    }
    if(flag==0){
        pp*=lll;
        pp%=MOD;
    }
    pp=pp%MOD;
    return pp;
}
#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...