Submission #382696

#TimeUsernameProblemLanguageResultExecution timeMemory
382696TrunktyGondola (IOI14_gondola)C++14
75 / 100
24 ms3180 KiB
#include <iostream> #include <algorithm> #include <vector> #include "gondola.h" using namespace std; int valid(int n, int inputSeq[]){ bool check[250005]; for(int i=1;i<250005;i++){ check[i] = false; } for(int i=0;i<n;i++){ if(check[inputSeq[i]]){ return 0; } check[inputSeq[i]] = true; } int ind=0; for(int i=0;i<n;i++){ if(inputSeq[i]<=n){ ind = i-(inputSeq[i]-1); if(ind<0){ ind += n; } break; } } int now = 1; for(int i=ind;i<n;i++){ if(inputSeq[i]<=n){ if(inputSeq[i]!=now){ return 0; } } now++; } for(int i=0;i<ind;i++){ if(inputSeq[i]<=n){ if(inputSeq[i]!=now){ return 0; } } now++; } return 1; } int replacement(int n, int gondolaSeq[], int replacementSeq[]){ int ind=0; for(int i=0;i<n;i++){ if(gondolaSeq[i]<=n){ ind = i-(gondolaSeq[i]-1); if(ind<0){ ind += n; } break; } } int have[250005],maxi=-1,pos=0; for(int i=1;i<250005;i++){ have[i] = -1; } for(int i=0;i<n;i++){ have[gondolaSeq[i]] = ((i-ind+n)%n)+1; if(gondolaSeq[i]>maxi){ maxi = gondolaSeq[i]; pos = ((i-ind+n)%n)+1; } } for(int i=n+1;i<maxi;i++){ if(have[i]==-1){ replacementSeq[i-n-1] = pos; pos = i; } else{ replacementSeq[i-n-1] = have[i]; } } replacementSeq[maxi-n-1] = pos; return maxi-n; } long long mod=1000000009; int countReplacement(int n, int inputSeq[]){ if(not valid(n,inputSeq)){ return 0; } long long ans=1,cnt=0,now=n+1; bool have[250005]; for(int i=1;i<250005;i++){ have[i] = false; } for(int i=0;i<n;i++){ have[inputSeq[i]] = true; if(inputSeq[i]>n){ cnt++; } } while(cnt>0){ if(not have[now]){ ans *= cnt; ans = ans%mod; } else{ cnt--; } now++; } int k = ans; return k; }
#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...