Submission #292335

# Submission time Handle Problem Language Result Execution time Memory
292335 2020-09-06T20:45:28 Z VodkaInTheJar Gondola (IOI14_gondola) C++14
Compilation error
0 ms 0 KB
#include <bits/stdc++.h>
#include "grader.h"
 
using namespace std;

const int maxn = 1e5 + 3; 

int valid(int n, int a[])
{
	set <int> s;
	for (int i = 0; i < n; i++)
	s.insert(a[i]);
	
	if ((int)s.size() < n)
	return 0;
	
	vector <int> v;
	for (int i = 0; i < n; i++)
	if (a[i] <= n)
	v.push_back(i);
	
	for (int i = 1; i < (int)v.size(); i++)
	{
		int val = a[v[0]] + v[i] - v[0];
		if (val > n)
		val -= n; 
		
		if (val != a[v[i]])
		return 0; 
	}
	
	return 1; 
}

int val[maxn];
int replacement(int n, int a[], int ans[])
{
	int pos = -1;
	for (int i = 0; i < n; i++)
	if (a[i] <= n)
	{
		pos = i;
		break;
	}
	
	if (pos == 1)
	for (int i = 0; i < n; i++)
	val[i] = i + 1; 
	
	else 
	{
		for (int i = pos + 1; i < n; i++)
		{
			val[i] = a[pos] + i - pos; 
			if (val[i] > n)
			val[i] -= n;
		}
		
		for (int i = 0; i < pos; i++)
		{
			val[i] = a[pos] + n - pos + i; 
			if (val[i] > n)
			val[i] -= n; 
		}
	}
	
	vector <pair <int, int> > v;
	for (int i = 0; i < n; i++)
	if (a[i] > n)
	v.push_back({a[i], i});
	
	sort (v.begin(), v.end());
	int last = n, len = 0;
	for (auto i: v)
	{
		for (int j = last + 1; j <= i.first; j++)
		{
			ans[len++] = val[i.second]; 
			val[i.second] = j; 
		}
		
		last = i.first; 
	}
	
	return len; 
}

const int mod = 1e9 + 9; 

int fast_pow(int x, int deg)
{
	int ans = 1, y = x;
	while (deg)
	{
		if (deg & 1)
		ans = 1ll * ans * y % mod;
		
		deg >>= 1;
		y = 1ll * y * y % mod; 
	}
	
	return ans;
}

int countReplacement(int n, int a[])
{
	if (!valid(n, a))
	return 0; 
	
	int ans = 1; 
	
	vector <int > v;
	for (int i = 0; i < n; i++)
	if (a[i] > n)
	v.push_back(a[i]);
	
	sort (v.begin(), v.end());
	int last = n;
	for (int i = 0; i < (int)v.size(); i++)
	{
		ans = 1ll * ans * fast_pow((int)v.size() - i, v[i] - last - 1) % mod;
		last = v[i]; 
	}
	
	bool is = false;
	for (int i = 0; i < n; i++)
	if (a[i] <= n)
	{
		is = true;
		break;
	}
	
	//assert(is != false); 
	
	if (!is)
	ans = 1ll * ans * n % mod; 
	
	return ans; 
}

/*
//const int maxn = 1e5 + 3; 

int n; 
int a[maxn]; 
int main()
{
	cin >> n;
	for (int i = 0; i < n; i++)
	cin >> a[i];
	
	cout << countReplacement(n, a) << endl; 
}
*/

Compilation message

gondola.cpp:2:10: fatal error: grader.h: No such file or directory
    2 | #include "grader.h"
      |          ^~~~~~~~~~
compilation terminated.