Submission #340043

#TimeUsernameProblemLanguageResultExecution timeMemory
340043bigDuckGondola (IOI14_gondola)C++14
100 / 100
36 ms6124 KiB
#include "gondola.h" #include<bits/stdc++.h> using namespace std; #define INIT ios_base :: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); #define mp make_pair #define pb push_back #define ft first #define sc second #define ll long long #define pii pair<int, int> #define count_bits __builtin_popcount ll mod=((ll)1000000000)+9; map<int, int> cnt_valid; int valid(int n, int inputSeq[]) { int i,j; for(i=0;i<n;i++)if(inputSeq[i]<=n)break; if(i<n)for(j=0;j<n;j++)if(inputSeq[j]<=n&&(inputSeq[j]+i)%n!=(inputSeq[i]+j)%n)return 0; std::sort(inputSeq,inputSeq+n); for(i=1;i<n;i++)if(inputSeq[i-1]==inputSeq[i])return 0; return 1; } //---------------------- int replacement(int n, int gondolaSeq[], int replacementSeq[]) { int pt=0, crd=0; for(int i=0; i<n; i++){ if(gondolaSeq[i]<=n){ pt=gondolaSeq[i], crd=i; break; } } int initial[100010]; if(pt==0){ for(int i=0; i<n; i++){ initial[i]=i+1; } } else{ for(int i=crd-pt+1, cnt=1; cnt<=n; i++){ i+=n; i%=n; initial[i]=cnt; cnt++; } } set<pii> s; for(int i=0; i<n; i++){ if(gondolaSeq[i]>n){ s.insert({gondolaSeq[i], i} ); } } if(s.empty()){ return 0; } int cnt=n+1; for(auto it=s.begin(); it!=s.end(); it++){ while(cnt<(it->ft) ){ replacementSeq[cnt-n-1]=initial[it->sc]; initial[it->sc]=cnt; cnt++; } replacementSeq[cnt-n-1]=initial[it->sc]; initial[it->sc]=cnt; cnt++; } return cnt-1-n; } //---------------------- ll exp(ll x, ll e){ if(e==0){ return 1; } if(e==1){ return x%mod; } return (exp(x, e%2)*(exp( (x*x)%mod, e/2) ) )%mod ; } int countReplacement(int n, int inputSeq[]) { ll p=n; if(valid(n, inputSeq)==0){ return 0; } multiset<ll> s; for(int i=0; i<n; i++){ if(inputSeq[i]>n){s.insert({inputSeq[i]});} else{ p--; } } ll ac=n+1; ll res=1; if( p==n ){ res=n; } for(auto it=s.begin(); it!=s.end(); it++){ res=(res*( exp(p, ((*it)-1)-ac+1 ) ) )%mod; ac=(*it)+1; p--; } return res; }
#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...