Submission #1360544

#TimeUsernameProblemLanguageResultExecution timeMemory
1360544gvancakGondola (IOI14_gondola)C++20
60 / 100
30 ms6620 KiB
#include "gondola.h"
#include <bits/stdc++.h>
#define f first
#define s second
#define pb push_back
#define mp make_pair
#define ll long long
using namespace std;
const ll mod=1e9+9;
//int gondolaSequence[100001];
//int replacementSequence[250001];

int valid(int n, int inputSeq[])
{
	int a[2*n+5];
	for (int i=0; i<n; i++) a[i]=inputSeq[i];
	map <ll,ll> m;
	m.clear();
	bool ok=0;
	int x,y;
	x=a[0]; y=0;
	for (int i=0; i<n; i++){
		m[a[i]]++;
		if (m[a[i]]>1){
			ok=1; break;
		}
		if (x>a[i]){
			x=a[i]; y=i;
		}
	}
	if (ok) return 0;
	if (x>n) return 1;
 	for (int i=0; i<n; i++) a[i+n]=a[i];
 	for (int i=y; i<y+n; i++){
 		if (x>n) x-=n;
 		if (a[i]>n || a[i]==x){
 			x++; continue;
		 }
		 ok=1; break;
		 
	 }
	 if (ok) return 0;
	 return 1;
}

//----------------------

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
	int a[2*n+5];
	for (int i=0; i<n; i++) a[i]=gondolaSeq[i];
	vector <pair<int,int> > p;
	int x=n+1,y;
	for (int i=0; i<n; i++){
		if (x>a[i]){
			x=a[i]; y=i;
		}
	}
	int b[2*n+5];
	for (int i=0; i<n; i++) b[i]=a[i];
	for (int i=0; i<n; i++) b[i+n]=b[i];
	if (x>n){
		b[0]=1; y=0; x=1;
	}
 	for (int i=y; i<y+n; i++){
 		if (x>n) x-=n;
 		if (b[i]>n || b[i]==x){
 			b[i]=x; if (i>=n) b[i-n]=x; x++; continue;
		 }
	}
//	for (int i=0; i<n; i++) cout<<b[i]<<" "; cout<<endl;
	p.clear();
	for (int i=0; i<n; i++){
		if (a[i]<=n) continue;
		p.pb(mp(a[i],b[i]));
	}
	sort(p.begin(),p.end());
	int l=0;
	if (p.size()==0) return l;
	//replacementSeq[0]=p[0].s; 
	x=n+1;
	for (int i=0; i<p.size(); i++){
		y=p[i].f; int z=p[i].s;
		while (y>=x){
			replacementSeq[l]=z; l++; z=x; x++; 
		}
	}
	
  	return l;
}

//----------------------
ll binpow(int a,int b){
	ll res=1;
	while (b>0){
		if (b%2==1) res=(res*a)%mod;
		b/=2;
		a=(a*a)%mod;
	}
	return res;
}
int countReplacement(int n, int inputSeq[])
{
	if (valid(n,inputSeq)==0) return 0;
	
	int a[2*n+5];
	for (int i=0; i<n; i++) a[i]=inputSeq[i];
	int x=0;
	vector <ll> v;
	v.clear();
	for (int i=0; i<n; i++){
		if (a[i]>n) v.pb(a[i]);
	}
	sort(v.begin(),v.end());
	x=n+1; int k=v.size(); ll ans=1,z=0;
	for (int i=0; i<v.size(); i++){
		int y=v[i]-x;
		if (k*y==0) z=1; else
		z=binpow(k,y);
		
	//	cout<<y<<" "<<k<<z<<endl;
		ans=(ans*z)%mod;
		k--; x=v[i];
	}
	bool ok=0;
	for (int i=0; i<n; i++){
		if (a[i]<=n) ok=1;
	}
	if (!ok) ans=(ans*n)%mod;
	return ans;
	
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...