제출 #731269

#제출 시각아이디문제언어결과실행 시간메모리
731269lucri곤돌라 (IOI14_gondola)C++17
90 / 100
18 ms2600 KiB
#include <stdio.h> #include <assert.h> #include <algorithm> #include "gondola.h" #define MOD 1000000009 int poz[100010]; bool e[250010]; int valid(int n, int inputSeq[]) { for(int i=0;i<=n;++i) { if(e[inputSeq[i]]) return 0; e[inputSeq[i]]=true; if(1<=inputSeq[i]&&inputSeq[i]<=n) poz[inputSeq[i]]=i+1; } int dif=-1; for(int i=1;i<=n;++i) if(poz[i]) { int val; if(i<=poz[i]) val=poz[i]-i; else val=poz[i]+n-i; if(dif==-1) dif=val; else if(dif!=val) return 0; } return 1; } //---------------------- int ago[100010]; int truevalue(int val,int n) { while(val<=0) val+=n; return val; } int goodshift(int n,int gondolaSeq[]) { int ls=-1; for(int i=0;i<n;++i) if(1<=gondolaSeq[i]&&gondolaSeq[i]<=n) { if(gondolaSeq[i]<=i+1) ls=i+1-gondolaSeq[i]; else ls=i+1+n-gondolaSeq[i]; break; } if(ls==-1) { for(int i=0;i<n;++i) ago[i+1]=gondolaSeq[i]; return 0; } for(int i=0;i<n;++i) ago[truevalue(i+1-ls,n)]=gondolaSeq[i]; return 1; } int pozval[250010],valac; int replacement(int n, int gondolaSeq[], int replacementSeq[]) { goodshift(n,gondolaSeq); for(int i=1;i<=n;++i) pozval[ago[i]]=i; valac=n; for(int i=1;i<=n;++i) ago[i]=i; for(int i=n+1;i<=250000;++i) { if(pozval[i]!=0) { while(valac<i) { replacementSeq[valac-n]=ago[pozval[i]]; ++valac; ago[pozval[i]]=valac; } } } return valac-n; } //---------------------- long long ans=1; long long putere(long long a,long long b) { if(b==0) return 1; long long m=putere(a,b/2); m*=m; m%=MOD; if(b%2) { m*=a; m%=MOD; } return m; } int countReplacement(int n, int inputSeq[]) { if(valid(n,inputSeq)==0) return 0; std::sort(inputSeq,inputSeq+n); if(inputSeq[0]>n) ans*=n; int poz=0; while(poz<n&&inputSeq[poz]<=n) ++poz; if(poz!=0) inputSeq[poz-1]=n; for(;poz<n;++poz) { if(poz==0) ans*=putere(n-poz,inputSeq[poz]-n-1); else ans*=putere(n-poz,inputSeq[poz]-inputSeq[poz-1]-1); ans%=MOD; } 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...