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...