Submission #1019322

#TimeUsernameProblemLanguageResultExecution timeMemory
1019322preskoGondola (IOI14_gondola)C++14
100 / 100
17 ms4560 KiB
#include<iostream> #include<vector> #include<algorithm> #include<utility> #include "gondola.h" #define MAXN 1000000010 #define MOD 1000000009 using namespace std; bool used[MAXN]; int valid(int n, int inputSeq[]) { for(long long i=0;i<n;i++) { if(used[inputSeq[i]])return 0; used[inputSeq[i]]=1; if(inputSeq[i]<=n) { long long prev=i-1,valp=inputSeq[i]-1; if(prev<0)prev=n-1; if(valp<1)valp=n; long long next=i+1,valn=inputSeq[i]+1; if(next>=n)next=0; if(valn>n)valn=1; if(inputSeq[prev]<=n && inputSeq[prev]!=valp)return 0; if(inputSeq[next]<=n && inputSeq[next]!=valn)return 0; } } return 1; } //---------------------- vector<pair<long long,long long>> order; int replacement(int n, int gondolaSeq[], int replacementSeq[]) { order.clear(); long long ans=0,pos=-1; for(long long i=0;i<n;i++)if(gondolaSeq[i]<=n){pos=i;break;} if(pos==-1)for(long long i=0;i<n;i++)order.push_back({gondolaSeq[i],i+1}); else { long long curr=gondolaSeq[pos]; for(long long i=pos-1;i>=0;i--) { curr--; if(curr==0)curr=n; if(gondolaSeq[i]>n)order.push_back({gondolaSeq[i],curr}); gondolaSeq[i]=curr; } for(long long i=n-1;i>pos;i--) { curr--; if(curr==0)curr=n; if(gondolaSeq[i]>n)order.push_back({gondolaSeq[i],curr}); gondolaSeq[i]=curr; } } sort(order.begin(),order.end()); long long last=n; for(long long i=0;i<(long long)order.size();i++) { long long ind=order[i].first; long long frst=order[i].second; replacementSeq[ans++]=frst; for(long long j=last+2;j<=ind;j++) { replacementSeq[ans++]=j-1; } last=ind; } return ans; } //---------------------- long long power(long long x, long long n) { if(n==0)return 1; if(n==1)return x; long long half=power(x,n/2); long long ne=(half*half)%MOD; if(n&1){ne*=x;ne%=MOD;} return ne%MOD; } int countReplacement(int n, int inputSeq[]) { order.clear(); if(!valid(n,inputSeq))return 0; long long pos=-1; for(long long i=0;i<n;i++)if(inputSeq[i]<=n){pos=i;break;} if(pos==-1)for(long long i=0;i<n;i++)order.push_back({inputSeq[i],i+1}); else { long long curr=inputSeq[pos]; for(long long i=pos-1;i>=0;i--) { curr--; if(curr==0)curr=n; if(inputSeq[i]>n)order.push_back({inputSeq[i],curr}); inputSeq[i]=curr; } for(long long i=n-1;i>pos;i--) { curr--; if(curr==0)curr=n; if(inputSeq[i]>n)order.push_back({inputSeq[i],curr}); inputSeq[i]=curr; } } if(order.size()==0)return 1; sort(order.begin(),order.end()); long long ans=1; if(pos==-1)ans=n; long long last=n; for(long long i=0;i<(long long)order.size();i++) { long long ind=order[i].first; long long use=power((long long)order.size()-i,ind-last-1)%MOD; ans*=use; ans%=MOD; last=ind; } return (int)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...