Submission #140192

#TimeUsernameProblemLanguageResultExecution timeMemory
140192ggohGondola (IOI14_gondola)C++14
90 / 100
24 ms2296 KiB
#include "gondola.h" #include <bits/stdc++.h> int ch[100005],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; for(i=0;i<n;i++)ch[i]=0; 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...