Submission #31704

#TimeUsernameProblemLanguageResultExecution timeMemory
31704top34051Gondola (IOI14_gondola)C++14
100 / 100
86 ms8268 KiB
#include "gondola.h" #include<bits/stdc++.h> using namespace std; #define maxn 100005 #define mod 1000000009LL int n,m,mx; int a[maxn]; set<int> vis; map<int,int> s; long long gpow(long long x,long long y) { if(y==0) return 1LL; if(y%2==0) return gpow((x*x)%mod,y/2); return (gpow(x,y-1)*x)%mod; } int valid(int N, int p[]) { int i, x = 0, val; n = N; //Build for(i=0;i<n;i++) if(p[i]<=n) x = i; val = p[x]; for(i=0;i<n;i++) a[x] = val, x = (x+1)%n, val = val%n+1; //Check for(i=0;i<n;i++) if(p[i]<=n && a[i]!=p[i]) return 0; //Rep for(i=0;i<n;i++) { if(vis.find(p[i])!=vis.end()) return 0; vis.insert(p[i]); } return 1; } int replacement(int N, int p[], int res[]) { int i, x=-1, val; n = N; //Build for(i=0;i<n;i++) if(p[i]<=n) x = i; if(x==-1) val = 1, x = 0; else val = p[x]; for(i=0;i<n;i++) a[x] = val, x = (x+1)%n, val = val%n+1; //Check for(i=0;i<n;i++) { mx = max(mx,p[i]); if(p[i]>n) s[p[i]] = i; } m = 0; for(i=n+1;i<=mx;i++) { if(s.find(i)!=s.end()) res[m++] = a[s[i]], a[s[i]] = i, s.erase(s.find(i)); else if(s.size()>0) res[m++] = a[s.begin()->second], a[s.begin()->second] = i; else return 0; } return m; } int countReplacement(int N, int p[]) { int i, x=-1, val, cy; long long ans; n = N; //Build cy = 0; for(i=0;i<n;i++) if(p[i]<=n) x = i; if(x==-1) val = 1, x = 0, cy = 1; else val = p[x]; for(i=0;i<n;i++) a[x] = val, x = (x+1)%n, val = val%n+1; //Check for(i=0;i<n;i++) if(p[i]<=n && a[i]!=p[i]) return 0; //Rep for(i=0;i<n;i++) { if(vis.find(p[i])!=vis.end()) return 0; vis.insert(p[i]); } //Check sort(&p[0],&p[n]); m = 0; for(i=0;i<n;i++) if(p[i]>n) m++; ans = 1; int last = n; for(i=0;i<n;i++) { x = p[i]; if(x<=n) continue; ans = ((ans*gpow(m,x-last-1))%mod + mod)%mod; // printf("%d: m = %d\n",x,m); m--; last = x; } if(cy) ans = ((ans*n)%mod + mod)%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...