Submission #138769

# Submission time Handle Problem Language Result Execution time Memory
138769 2019-07-30T10:06:58 Z Mahmoud_Adel Gondola (IOI14_gondola) C++14
60 / 100
22 ms 4344 KB
#include "gondola.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6+5, mod = 1e9+9;
int mark[N], mep[N];
ll power(ll a, ll b)
{
	if(!b) return 1;
	ll temp = power(a, b/2);
	temp = (temp*temp)%mod;
	if(b%2) temp *= a, temp %= mod;
	return temp;
}
int valid(int n, int inputSeq[])
{
	for(int i=0; i<n; i++)
	{
		if(mark[inputSeq[i]]) return 0;
		else mark[inputSeq[i]] = 1;
	}
	int j = -1;
	for(int i=0; i<n; i++) if(inputSeq[i] > 0 && inputSeq[i] <= n) j = i;
	if(j == -1) return 1;
	for(int i=0; i<n; i++)
	{
		int id = (i+j)%n, jd = (i+j+1)%n;
		if(inputSeq[jd] > n) inputSeq[jd] = inputSeq[id]%n + 1;
		if(inputSeq[jd] != inputSeq[id]%n + 1) return 0;
	}
	return 1;
}

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

int replacement(int n, int inputSeq[], int replacementSeq[])
{
	memset(mep, 0, sizeof mep);
	int j = -1, c = n;
	for(int i=0; i<n; i++) if(inputSeq[i] <= n) j  = i;
	if(j == -1)
	{
		for(int i=0; i<n; i++) replacementSeq[inputSeq[i]-n-1] = i+1;
		for(int i=0; i<n; i++)
		{
			int id = (i+j) % n, jd = (i+j+1) % n;
			if(inputSeq[jd] > n) c = max(c, inputSeq[jd]), 
			mep[inputSeq[jd]] = inputSeq[id]%n + 1;
		}
		int last = -1;
		for(int i=n+1; i<c; i++)
		{
			if(mep[i]) replacementSeq[i-n-1] = mep[i];
			else replacementSeq[i-n-1] = mep[c], last = i;
		}
		if(last != -1) replacementSeq[c-n-1] = last;
		else replacementSeq[c-n-1] = mep[c];
		return c-n;	
	}
	for(int i=0; i<n; i++)
	{
		int id = (i+j) % n, jd = (i+j+1) % n;
		if(inputSeq[jd] > n) c = max(c, inputSeq[jd]), 
		mep[inputSeq[jd]] = inputSeq[id]%n + 1, inputSeq[jd] = inputSeq[id]%n + 1;
	}
	int last = -1;
	for(int i=n+1; i<c; i++)
	{
		if(mep[i]) replacementSeq[i-n-1] = mep[i];
		else replacementSeq[i-n-1] = mep[c], last = i;
	}
	if(last != -1) replacementSeq[c-n-1] = last;
	else replacementSeq[c-n-1] = mep[c];
	return c-n;
}

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

int countReplacement(int n, int inputSeq[])
{
	int tmp[n];
	for(int i=0; i<n; i++) tmp[i] = inputSeq[i];
	if(!valid(n, inputSeq)) return 0;
	for(int i=0; i<n; i++) inputSeq[i] = tmp[i];
	ll j = -1, c = n;
	vector<ll> vec;
	for(int i=0; i<n; i++) if(inputSeq[i] <= n) j  = i;
	else vec.push_back(inputSeq[i]);
	ll ans = 1;
	vec.push_back(n);
	sort(vec.begin(), vec.end());
	for(int i=0; i<vec.size()-1; i++)
	{
		ll tmp = power((ll)vec.size()-i-1, vec[i+1]-vec[i]-1);
		ans = (ans%mod * tmp%mod)%mod;
	}
	return (ans*(j==-1? n:1))%mod;
}

Compilation message

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:92:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<vec.size()-1; i++)
               ~^~~~~~~~~~~~~
gondola.cpp:85:13: warning: unused variable 'c' [-Wunused-variable]
  ll j = -1, c = n;
             ^
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 380 KB Output is correct
6 Correct 7 ms 760 KB Output is correct
7 Correct 14 ms 1148 KB Output is correct
8 Correct 12 ms 1016 KB Output is correct
9 Correct 5 ms 632 KB Output is correct
10 Correct 13 ms 1116 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 424 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 7 ms 760 KB Output is correct
7 Correct 14 ms 1144 KB Output is correct
8 Correct 12 ms 1016 KB Output is correct
9 Correct 5 ms 632 KB Output is correct
10 Correct 14 ms 1144 KB Output is correct
11 Correct 2 ms 376 KB Output is correct
12 Correct 2 ms 400 KB Output is correct
13 Correct 9 ms 1400 KB Output is correct
14 Correct 4 ms 360 KB Output is correct
15 Correct 15 ms 1308 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 4216 KB Output is correct
2 Correct 5 ms 4216 KB Output is correct
3 Correct 5 ms 4216 KB Output is correct
4 Correct 5 ms 4216 KB Output is correct
5 Correct 5 ms 4216 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 4216 KB Output is correct
2 Correct 5 ms 4188 KB Output is correct
3 Correct 5 ms 4212 KB Output is correct
4 Correct 5 ms 4216 KB Output is correct
5 Correct 5 ms 4216 KB Output is correct
6 Incorrect 13 ms 4344 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 4216 KB Output is correct
2 Correct 6 ms 4224 KB Output is correct
3 Correct 5 ms 4216 KB Output is correct
4 Correct 6 ms 4216 KB Output is correct
5 Correct 5 ms 4216 KB Output is correct
6 Incorrect 5 ms 4216 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 372 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 380 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 504 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Correct 2 ms 376 KB Output is correct
8 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 296 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Correct 2 ms 376 KB Output is correct
8 Correct 2 ms 376 KB Output is correct
9 Correct 22 ms 2548 KB Output is correct
10 Correct 18 ms 2164 KB Output is correct
11 Correct 9 ms 1656 KB Output is correct
12 Correct 10 ms 1528 KB Output is correct
13 Correct 4 ms 760 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Correct 2 ms 376 KB Output is correct
8 Correct 2 ms 376 KB Output is correct
9 Correct 22 ms 2420 KB Output is correct
10 Correct 18 ms 2164 KB Output is correct
11 Correct 9 ms 1656 KB Output is correct
12 Correct 10 ms 1528 KB Output is correct
13 Correct 4 ms 760 KB Output is correct
14 Runtime error 18 ms 2040 KB Execution killed with signal 11 (could be triggered by violating memory limits)
15 Halted 0 ms 0 KB -