Submission #228611

#TimeUsernameProblemLanguageResultExecution timeMemory
228611ryanseeGondola (IOI14_gondola)C++14
100 / 100
49 ms7304 KiB
#include "gondola.h" #include "bits/stdc++.h" using namespace std; #define FAST ios_base::sync_with_stdio(false); cin.tie(0); #define pb push_back #define eb emplace_back #define ins insert #define f first #define s second #define cbr cerr << "hi\n" #define mmst(x, v) memset((x), v, sizeof ((x))) #define siz(x) ll(x.size()) #define all(x) (x).begin(), (x).end() #define lbd(x,y) (lower_bound(all(x),y)-x.begin()) #define ubd(x,y) (upper_bound(all(x),y)-x.begin()) mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); //can be used by calling rng() or shuffle(A, A+n, rng) inline long long rand(long long x, long long y) { return (rng() % (y+1-x)) + x; } //inclusivesss string inline to_string(char c) {string s(1,c);return s;} template<typename T> inline T gcd(T a,T b){ return a==0?llabs(b):gcd(b%a,a); } typedef long long ll; typedef long double ld; #define FOR(i,s,e) for(ll i=s;i<=ll(e);++i) #define DEC(i,s,e) for(ll i=s;i>=ll(e);--i) typedef pair<ll,ll>pi; typedef pair<ll,pi>spi; typedef pair<pi,pi>dpi; #define LLINF ((long long)1e18) #define INF int(1e9+1e6) #define MAXN (100006) ll n; unordered_map<ll,ll>exists,pos; int valid(int N, int A[]) { n=N; ll shift=-1; FOR(i,0,n-1)--A[i]; FOR(i,0,n-1)if(exists[A[i]])return 0;else exists[A[i]]=1; FOR(i,0,n-1)if(A[i]<n){ if(~shift){if((i+shift)%n!=A[i])return 0;} else shift=(A[i]-i+n)%n; } return 1; } void shifty(int*A){ ll shift=0; FOR(i,0,n-1)if(A[i]<=n)shift=(A[i]-1-i+n)%n; vector<ll> B(n); FOR(i,0,n-1)B[(i+shift)%n]=A[i]; FOR(i,0,n-1)A[i]=B[i]; } int replacement(int N, int A[], int B[]) { n=N; shifty(A); ll mx=max_element(A,A+n)-A; FOR(i,0,n-1)pos[A[i]]=i; ll co=0,val=mx+1; FOR(i,n+1,A[mx]){ if(pos.count(i) && i!=A[mx]) B[co++]=pos[i]+1; else B[co++]=val, val=i; } return co; } ll mod=1e9+9; int B[MAXN]; int countReplacement(int N, int A[]) { n=N; FOR(i,0,n-1)B[i]=A[i]; ll ans=valid(n,B); vector<ll> hmm; FOR(i,0,n-1)if(A[i]>n)hmm.eb(A[i]); sort(all(hmm)); auto qexp=[&](ll x,ll e){ ll sum=1; while(e){ if(e&1)sum*=x,sum%=mod; x*=x,x%=mod; e>>=1; } return sum; }; // assert(siz(hmm)<n); FOR(i,0,siz(hmm)-1){ if(hmm[i]-1-(i?hmm[i-1]:n) > 0) { ll p=hmm[i]-1-(i?hmm[i-1]:n); ans *= qexp(siz(hmm) - i, p), ans %= mod; } } if(siz(hmm)==n) ans*=n, ans%=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...