Submission #7678

#TimeUsernameProblemLanguageResultExecution timeMemory
7678dohyun0324Gondola (IOI14_gondola)C++98
100 / 100
116 ms11236 KiB
#include "gondola.h" #include<algorithm> #include<map> #include<string.h> using namespace std; map<int,int>visit2; int a[100010],ch[250010],visit[250010]; long long int sav[50],sav2[50]; struct data { int x,y; bool operator<(const data&r)const { return x<r.x; } }arr[250010]; int valid(int n, int inputSeq[]) { int i,k=0; for(i=0;i<n;i++) { if(visit[inputSeq[i]]==1) return 0; visit[inputSeq[i]]=1; if(inputSeq[i]<=n) ch[inputSeq[i]]=i+1; } for(i=1;i<=n;i++) { if(ch[i]!=0 && k==0) { k=ch[i]; continue; } if(k!=0) { k++; if(k>n) k=1; } if(ch[i]!=0 && k!=ch[i]) return 0; } return 1; } //---------------------- int replacement(int n, int gondolaSeq[], int replacementSeq[]) { int s,i,big=0,k=1,w=0,top=0,pos=0,p=0; for(i=0;i<n;i++) { ch[gondolaSeq[i]]=1; if(gondolaSeq[i]<=n) visit[i]=1; if(big<gondolaSeq[i]) big=gondolaSeq[i]; if(gondolaSeq[i]<=n) pos=i,p=gondolaSeq[i]; } for(i=0;i<n;i++) { if(visit[i]==0) { top++; arr[top].x=gondolaSeq[i]; arr[top].y=i; } } sort(arr+1,arr+top+1); if(p==0) { for(i=0;i<n;i++) a[i]=i+1; } else { for(i=pos;i<=pos+n-1;i++) { a[i%n]=p; p++; if(p==n+1) p=1; } } for(i=n+1;i<=big;i++) { if(ch[i]==0) { replacementSeq[w++]=a[arr[k].y]; a[arr[k].y]=i; } else { replacementSeq[w++]=a[arr[k].y]; a[arr[k].y]=i; k++; } } return w; } //---------------------- long long int f(long long int c,int k) { int i,t=0; long long int gap=1; sav[1]=c; for(i=2;i<=50;i++) { sav[i]=sav[i-1]*sav[i-1]; sav[i]%=1000000009; } while(k>0) { sav2[++t]=k%2; k/=2; } for(i=1;i<=t;i++) { if(sav2[i]==1) { gap*=sav[i]; gap%=1000000009; } } return gap; } int countReplacement(int n, int inputSeq[]) { int s,i,big=0,k=0,w=0,top=0,pos=0,p=0,r=0; long long int dap=1,c; for(i=0;i<n;i++) { if(visit2[inputSeq[i]]==1) return 0; visit2[inputSeq[i]]=1; if(inputSeq[i]<=n) ch[inputSeq[i]]=i+1; } for(i=1;i<=n;i++) { if(ch[i]!=0 && k==0) { k=ch[i]; continue; } if(k!=0) { k++; if(k>n) k=1; } if(ch[i]!=0 && k!=ch[i]) return 0; } k=1; memset(ch,0,sizeof ch); for(i=0;i<n;i++) { if(inputSeq[i]>n) ch[++r]=inputSeq[i]; if(inputSeq[i]<=n) visit[i]=1; if(big<inputSeq[i]) big=inputSeq[i]; if(inputSeq[i]<=n) pos=i,p=inputSeq[i]; } for(i=0;i<n;i++) { if(visit[i]==0) { top++; arr[top].x=inputSeq[i]; arr[top].y=i; } } sort(arr+1,arr+top+1); sort(ch+1,ch+r+1); if(p==0) { for(i=0;i<n;i++) a[i]=i+1; dap=n; } else { for(i=pos;i<=pos+n-1;i++) { a[i%n]=p; p++; if(p==n+1) p=1; } } c=top; ch[0]=n; for(i=1;i<=r;i++) { dap*=f(c,ch[i]-ch[i-1]-1); dap%=1000000009; c--; } return dap; }
#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...