제출 #131393

#제출 시각아이디문제언어결과실행 시간메모리
131393Mahdi_Jfri곤돌라 (IOI14_gondola)C++14
100 / 100
74 ms5596 KiB
#include "gondola.h"
#include<bits/stdc++.h>

using namespace std;

#define ll long long
#define pb push_back

const int maxn = 1e5 + 20;
const int maxm = 2.5e5 + 20;

int ex[maxn] , num[maxm];

int valid(int n, int a[])
{
	set<int> st;
	for(int i = 0; i < n; i++)
	{
		a[i]--;
		if(a[i] < 0)
			return 0;
		st.insert(a[i]);
	}

	int f = 1;
	for(int i = 0; i < n; i++)
		if(a[i] < n)
			f &= (a[(i + 1) % n] >= n || a[(i + 1) % n] == (a[i] + 1) % n);

	f &= (int)st.size() == n;
	return f;
}

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

int replacement(int n, int a[], int res[])
{
	memset(num , -1 , sizeof num);
	bool f = 0;
	for(int i = 0; i < n; i++)
	{
		a[i]--;
		if(!f && a[i] < n)
		{
			for(int j = 0; j < n; j++)
				ex[j] = ((a[i] + (j - i) + n) % n) + 1;
			f = 1;
		}
	}

	if(!f)
		for(int i = 0; i < n; i++)
			ex[i] = i + 1;

	int m = *max_element(a , a + n);
	int p = max_element(a , a + n) - a;
	for(int i = 0; i < n; i++)
		num[a[i]] = i;

	for(int i = n; i <= m; i++)
	{
		if(num[i] < 0)
			res[i - n] = ex[p] , ex[p] = i + 1;
		else
			res[i - n] = ex[num[i]] , ex[num[i]] = i + 1;
	}

	return m - n + 1;
}

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

const int mod = 1e9 + 9;

int bpw(int a , int b)
{
	if(b <= 0)
		return 1;
	int x = bpw(a , b / 2);

	x = 1LL * x * x % mod;
	if(b&1)
		x = 1LL * x * a % mod;

	return x;
}

int countReplacement(int n, int a[])
{
	if(!valid(n , a))
		return 0;
	bool f = 0;

	int res = 1;

	vector<int> cmp;
	for(int i = 0; i < n; i++)
	{
		if(a[i] >= n)
			cmp.pb(a[i]);
		else
			f = 1;
	}

	if(!f)
		for(int i = 0; i < n; i++)
			res = n;

	sort(cmp.begin() , cmp.end());
	int m = cmp.size() , last = n;

	for(int i = 0; i < m; i++)
	{
		res = 1LL * res * bpw(m - i , cmp[i] - last) % mod;
		last = cmp[i] + 1;
	}

	return res;
}







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