Submission #932754

#TimeUsernameProblemLanguageResultExecution timeMemory
932754vjudge1Gondola (IOI14_gondola)C++17
100 / 100
20 ms3664 KiB
#include<bits/stdc++.h> #pragma GCC optimize("Ofast") using namespace std; #define F first #define S second #define ll long long // #define int ll #define pb push_back #define sz(s) (int)s.size() #define pii pair<int,int> #define all(v) v.begin(),v.end() #define mem(a,i) memset(a,i,sizeof(a)) #define in insert #define lb lower_bound #define ub upper_bound #define y1 yy #define ppb pop_back #define ull unsigned ll const int MAX=3e6+55; const int inf=1e9; const int N=2e5; const int C=331; const int C1=431; const int mod=1e9+9; const int mod1=1e9+9; #include "gondola.h" int pos[MAX]; int valid(int n, int a[]) { int mn=0; for(int i=0;i<n;i++){ if(a[i]<a[mn])mn=i; // pos[a[i]]=i; } vector<int> v; for(int i=mn;i<n;i++){ if(a[i]<=n){ v.pb(a[i]); pos[a[i]]=i-mn; } } for(int i=0;i<mn;i++){ if(a[i]<=n){ v.pb(a[i]); pos[a[i]]=n-mn+i; } } for(int i=1;i<sz(v);i++){ if(v[i]<=v[i-1]||v[i]-v[i-1]!=pos[v[i]]-pos[v[i-1]])return 0; } sort(a,a+n); for(int i=1;i<n;i++){ if(a[i]==a[i-1])return 0; } return 1; } int replacement(int n, int a[], int q[]) { vector<pii> v; bool ok=0; for(int i=0;i<n;i++){ if(a[i]<=n){ ok=1; int st=i-a[i]+1; if(st<0)st+=n; // cout<<st<<"\n"; for(int j=st;j<n;j++)if(a[j]>n)v.pb({a[j],j-st+1}); for(int j=0;j<st;j++)if(a[j]>n)v.pb({a[j],n-st+j+1}); break; } } if(!ok){ for(int i=0;i<n;i++){ v.pb({a[i],i+1}); } } sort(all(v)); int pos=0; int r=n+1; // cout<<sz(v)<<"\n"; for(int i=0;i<sz(v);i++){ q[pos++]=v[i].S; // cout<<r<<" "<<v[i].F; while(r<v[i].F){ q[pos++]=r++; } r++; } return pos; } int binpow(int a,int n){ if(n==0)return 1; if(n%2==1)return a*1ll*binpow(a,n-1)%mod; int k=binpow(a,n/2); return k*1ll*k%mod; } //---------------------- int countReplacement(int n, int a[]) { ll ans=1; if(!valid(n,a))return 0; vector<int> v; for(int i=0;i<n;i++){ if(a[i]>n){ v.pb(a[i]); } } sort(all(v)); int r=n+1; for(int i=0;i<sz(v);i++){ // cout<<sz(v)-i<<" "<<v[i]-r<<" "<<binpow(sz(v)-i,v[i]-r)<<"\n"; ans=ans*1ll*binpow(sz(v)-i,v[i]-r)%mod; r=v[i]+1; } if(sz(v)==n)ans=ans*1ll*n%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...