Submission #16455

#TimeUsernameProblemLanguageResultExecution timeMemory
16455atomzenoGondola (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...