Submission #52441

# Submission time Handle Problem Language Result Execution time Memory
52441 2018-06-26T02:57:30 Z shoemakerjo Gondola (IOI14_gondola) C++14
40 / 100
81 ms 5224 KB
#include <bits/stdc++.h>
#include "gondola.h"
using namespace std;
#define ll long long
#define pii pair<int, int>
const int mod = 1000000009;

int modpow(int base, int p) {
	if (p == 0) return 1;
	if (p & 1) {
		int tmp = modpow(base, p-1);
		return (tmp*1LL*base)%mod;
	}
	int tmp = modpow(base, p/2);
	return (tmp*1LL*tmp)%mod;
}

int valid(int n, int inputSeq[])
{
	int minval = n+1;
	int minind = 0;
	set<int> seen;
	for (int i = 0; i < n; i++) {
		if (inputSeq[i] < minval) {
			minval = inputSeq[i];
			minind = i;
		}
		if (seen.count(inputSeq[i]) > 0) return 0;
		seen.insert(inputSeq[i]);
	}
	if (minval > n) return 1; //i think this is fine then

	int cur = minind;
	int ivals[n];
	int cv = minval;
	//cannot appear after something that is greater than me and still less than n
	int maxv = -1;
	for (int i = 0; i < n; i++) {
		ivals[cur] = cv;
		cur = (cur+1)%n;
		cv = (cv+1)%n;
		if (cv == 0) cv += n;
	}
	for (int i = 0; i < n; i++) {
		if (inputSeq[i] <= n && inputSeq[i] != ivals[i]) {
			return 0;
		}
	}
	return 1; //nothing was bad enough to return 0
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{	
	//find a valid replacement sequence

	int sz = 0; //get what becomes what

	int lowbelow = -1;
	int lowind = -1;
	int maxval = -1;
	map<int, int> ch;
	int maxind = -1;
	int cvals[n];
	for (int i = 0; i < n; i++) {
		cvals[i] = gondolaSeq[i];
		if (gondolaSeq[i] <= n) {
			if (gondolaSeq[i] < lowbelow || lowbelow == -1) {
				lowbelow = gondolaSeq[i];
				lowind = i;
			}

		}
		else {
			ch[gondolaSeq[i]] = i;
		}
		if (gondolaSeq[i] > maxval) {
			maxval = gondolaSeq[i];
			maxind = i;
		}
	}
	//do not use a vector for ans just add stuff to replacementSeq as you go and increment sz
	int initialvals[n];
	if (lowind == -1) {
		//just do stuff idk - for now we will just do nothing
	}
	int cv = gondolaSeq[lowind];
	int ci = lowind;
	for (int i = 0; i < n; i++) {
		initialvals[ci] = cv;
		ci = (ci+1)%n;
		cv = (cv+1)%n;
		if (cv == 0) cv += n;
	}
	for (int i = n+1; i <= maxval; i++) {
		if (ch[i]) {
			replacementSeq[sz++] = cvals[ch[i]];
		}
		else {
			replacementSeq[sz++] = cvals[maxind];
			cvals[maxind] = i;
		}
	}

	return sz;
}

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

int countReplacement(int n, int inputSeq[])
{
	if (valid(n, inputSeq) == 0) { //just add this in there
		return 0;
	}
	int ans = 1;
	vector<int> aftn;
	aftn.push_back(n);
	for (int i = 0; i < n; i++) {
		if (inputSeq[i] > n) {
			aftn.push_back(inputSeq[i]);
		}
	}
	sort(aftn.begin(), aftn.end());
	for (int i = 1; i < aftn.size(); i++) {
		int rep = aftn[i]-aftn[i-1]-1;
		int ops = aftn.size() - i;
		//cout << "here: " << aftn[i] << " rep, ops: " << rep << " " << ops << endl;
		ans = (ans * 1LL * modpow(ops, rep))%mod;
	}

	return ans;
}

Compilation message

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:37:6: warning: unused variable 'maxv' [-Wunused-variable]
  int maxv = -1;
      ^~~~
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:84:6: warning: variable 'initialvals' set but not used [-Wunused-but-set-variable]
  int initialvals[n];
      ^~~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:125:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 1; i < aftn.size(); i++) {
                  ~~^~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 380 KB Output is correct
2 Correct 2 ms 488 KB Output is correct
3 Correct 2 ms 564 KB Output is correct
4 Correct 2 ms 728 KB Output is correct
5 Correct 2 ms 728 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 728 KB Output is correct
2 Correct 2 ms 728 KB Output is correct
3 Correct 2 ms 728 KB Output is correct
4 Correct 2 ms 728 KB Output is correct
5 Correct 2 ms 728 KB Output is correct
6 Correct 18 ms 2656 KB Output is correct
7 Correct 13 ms 2656 KB Output is correct
8 Correct 34 ms 4448 KB Output is correct
9 Correct 11 ms 4448 KB Output is correct
10 Correct 46 ms 5088 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 5088 KB Output is correct
2 Correct 2 ms 5088 KB Output is correct
3 Correct 2 ms 5088 KB Output is correct
4 Correct 2 ms 5088 KB Output is correct
5 Correct 3 ms 5088 KB Output is correct
6 Correct 19 ms 5088 KB Output is correct
7 Correct 13 ms 5088 KB Output is correct
8 Correct 35 ms 5088 KB Output is correct
9 Correct 11 ms 5088 KB Output is correct
10 Correct 46 ms 5152 KB Output is correct
11 Correct 2 ms 5152 KB Output is correct
12 Correct 2 ms 5152 KB Output is correct
13 Correct 25 ms 5152 KB Output is correct
14 Correct 2 ms 5152 KB Output is correct
15 Correct 64 ms 5224 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 3 ms 5224 KB Integer 77 violates the range [1, 76]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 5224 KB Integer 77 violates the range [1, 76]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 5224 KB Integer 77 violates the range [1, 76]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 5224 KB Output is correct
2 Correct 2 ms 5224 KB Output is correct
3 Correct 2 ms 5224 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 5224 KB Output is correct
2 Correct 2 ms 5224 KB Output is correct
3 Correct 2 ms 5224 KB Output is correct
4 Correct 2 ms 5224 KB Output is correct
5 Correct 2 ms 5224 KB Output is correct
6 Correct 2 ms 5224 KB Output is correct
7 Correct 2 ms 5224 KB Output is correct
8 Correct 2 ms 5224 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 5224 KB Output is correct
2 Correct 2 ms 5224 KB Output is correct
3 Correct 2 ms 5224 KB Output is correct
4 Correct 2 ms 5224 KB Output is correct
5 Correct 2 ms 5224 KB Output is correct
6 Correct 2 ms 5224 KB Output is correct
7 Correct 2 ms 5224 KB Output is correct
8 Correct 2 ms 5224 KB Output is correct
9 Correct 58 ms 5224 KB Output is correct
10 Correct 44 ms 5224 KB Output is correct
11 Correct 17 ms 5224 KB Output is correct
12 Correct 22 ms 5224 KB Output is correct
13 Incorrect 6 ms 5224 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 5224 KB Output is correct
2 Correct 2 ms 5224 KB Output is correct
3 Correct 2 ms 5224 KB Output is correct
4 Correct 2 ms 5224 KB Output is correct
5 Correct 2 ms 5224 KB Output is correct
6 Correct 2 ms 5224 KB Output is correct
7 Correct 2 ms 5224 KB Output is correct
8 Correct 2 ms 5224 KB Output is correct
9 Correct 81 ms 5224 KB Output is correct
10 Correct 50 ms 5224 KB Output is correct
11 Correct 18 ms 5224 KB Output is correct
12 Correct 21 ms 5224 KB Output is correct
13 Incorrect 7 ms 5224 KB Output isn't correct
14 Halted 0 ms 0 KB -