Submission #58389

# Submission time Handle Problem Language Result Execution time Memory
58389 2018-07-17T16:20:51 Z aome Gondola (IOI14_gondola) C++17
100 / 100
128 ms 7220 KB
#include "gondola.h"

#include <bits/stdc++.h>

using namespace std;

int valid(int n, int inputSeq[]) {
	map<int, int> mp;
  	for (int i = 0; i < n; ++i) {
  		if (mp[inputSeq[i]]) return 0;
  		mp[inputSeq[i]] = 1;
  	}
  	int pos = -1;
  	for (int i = 0; i < n; ++i) {
  		if (inputSeq[i] <= n) pos = i;
  	}
  	if (pos == -1) return 1;
  	for (int i = 0; i < n; ++i) {
  		if (inputSeq[i] <= n && inputSeq[i] != (inputSeq[pos] - 1 + i - pos + n) % n + 1) return 0;
  	}
  	return 1;
}

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

int arr[100005];

int replacement(int n, int gondolaSeq[], int replacementSeq[]) {
	int pos = -1;
	int start = -1;
	vector< pair<int, int> > vec;
	for (int i = 0; i < n; ++i) {
		if (gondolaSeq[i] <= n) pos = i, start = gondolaSeq[i];
	}
	if (pos == -1) pos = 0, start = 1;
	for (int i = 0; i < n; ++i) {
		arr[(i + pos) % n] = (start - 1 + i) % n + 1;
	}
	for (int i = 0; i < n; ++i) {
		if (gondolaSeq[i] > n) vec.push_back({gondolaSeq[i], arr[i]});
	}
	sort(vec.begin(), vec.end());
	int sz = 0;
	for (int i = 0; i < vec.size(); ++i) {
		int tmp = (i > 0 ? vec[i - 1].first + 1 : n + 1);
		replacementSeq[sz++] = vec[i].second;
		for (int j = tmp; j < vec[i].first; ++j) {
			replacementSeq[sz++] = j;
		}
	}
	return sz;
}

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

const int mod = 1e9 + 9;

int binPow(int x, int y) {
	if (!y) return 1;
	int ret = binPow(x, y >> 1);
	ret = 1LL * ret * ret % mod;
	if (y & 1) ret = 1LL * ret * x % mod;
	return ret;
}

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

Compilation message

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:44:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < vec.size(); ++i) {
                  ~~^~~~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:74:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < vec.size(); ++i) {
                  ~~^~~~~~~~~~~~
gondola.cpp:78:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if (vec.size() == n) {
      ~~~~~~~~~~~^~~~
# Verdict Execution time Memory Grader output
1 Correct 3 ms 248 KB Output is correct
2 Correct 3 ms 408 KB Output is correct
3 Correct 3 ms 536 KB Output is correct
4 Correct 3 ms 536 KB Output is correct
5 Correct 3 ms 536 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 536 KB Output is correct
2 Correct 2 ms 536 KB Output is correct
3 Correct 2 ms 536 KB Output is correct
4 Correct 2 ms 536 KB Output is correct
5 Correct 2 ms 536 KB Output is correct
6 Correct 21 ms 2364 KB Output is correct
7 Correct 15 ms 2364 KB Output is correct
8 Correct 35 ms 4244 KB Output is correct
9 Correct 13 ms 4244 KB Output is correct
10 Correct 54 ms 4844 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 4844 KB Output is correct
2 Correct 2 ms 4844 KB Output is correct
3 Correct 2 ms 4844 KB Output is correct
4 Correct 2 ms 4844 KB Output is correct
5 Correct 3 ms 4844 KB Output is correct
6 Correct 23 ms 4844 KB Output is correct
7 Correct 16 ms 4844 KB Output is correct
8 Correct 37 ms 4844 KB Output is correct
9 Correct 12 ms 4844 KB Output is correct
10 Correct 55 ms 4844 KB Output is correct
11 Correct 2 ms 4844 KB Output is correct
12 Correct 2 ms 4844 KB Output is correct
13 Correct 35 ms 4844 KB Output is correct
14 Correct 3 ms 4844 KB Output is correct
15 Correct 111 ms 4988 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 4988 KB Output is correct
2 Correct 3 ms 4988 KB Output is correct
3 Correct 2 ms 4988 KB Output is correct
4 Correct 3 ms 4988 KB Output is correct
5 Correct 2 ms 4988 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4988 KB Output is correct
2 Correct 2 ms 4988 KB Output is correct
3 Correct 2 ms 4988 KB Output is correct
4 Correct 2 ms 4988 KB Output is correct
5 Correct 3 ms 4988 KB Output is correct
6 Correct 3 ms 4988 KB Output is correct
7 Correct 4 ms 4988 KB Output is correct
8 Correct 2 ms 4988 KB Output is correct
9 Correct 3 ms 4988 KB Output is correct
10 Correct 4 ms 4988 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 4988 KB Output is correct
2 Correct 3 ms 4988 KB Output is correct
3 Correct 2 ms 4988 KB Output is correct
4 Correct 3 ms 4988 KB Output is correct
5 Correct 3 ms 4988 KB Output is correct
6 Correct 3 ms 4988 KB Output is correct
7 Correct 3 ms 4988 KB Output is correct
8 Correct 4 ms 4988 KB Output is correct
9 Correct 3 ms 4988 KB Output is correct
10 Correct 4 ms 4988 KB Output is correct
11 Correct 15 ms 4988 KB Output is correct
12 Correct 18 ms 4988 KB Output is correct
13 Correct 19 ms 4988 KB Output is correct
14 Correct 14 ms 4988 KB Output is correct
15 Correct 28 ms 4988 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 4988 KB Output is correct
2 Correct 2 ms 4988 KB Output is correct
3 Correct 3 ms 4988 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 4988 KB Output is correct
2 Correct 3 ms 4988 KB Output is correct
3 Correct 3 ms 4988 KB Output is correct
4 Correct 3 ms 4988 KB Output is correct
5 Correct 3 ms 4988 KB Output is correct
6 Correct 3 ms 4988 KB Output is correct
7 Correct 4 ms 4988 KB Output is correct
8 Correct 3 ms 4988 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4988 KB Output is correct
2 Correct 3 ms 4988 KB Output is correct
3 Correct 3 ms 4988 KB Output is correct
4 Correct 0 ms 4988 KB Output is correct
5 Correct 2 ms 4988 KB Output is correct
6 Correct 3 ms 4988 KB Output is correct
7 Correct 2 ms 4988 KB Output is correct
8 Correct 2 ms 4988 KB Output is correct
9 Correct 81 ms 4988 KB Output is correct
10 Correct 57 ms 4988 KB Output is correct
11 Correct 22 ms 4988 KB Output is correct
12 Correct 32 ms 4988 KB Output is correct
13 Correct 9 ms 4988 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4988 KB Output is correct
2 Correct 2 ms 4988 KB Output is correct
3 Correct 3 ms 4988 KB Output is correct
4 Correct 2 ms 4988 KB Output is correct
5 Correct 3 ms 4988 KB Output is correct
6 Correct 0 ms 4988 KB Output is correct
7 Correct 3 ms 4988 KB Output is correct
8 Correct 2 ms 4988 KB Output is correct
9 Correct 106 ms 4988 KB Output is correct
10 Correct 74 ms 4988 KB Output is correct
11 Correct 24 ms 4988 KB Output is correct
12 Correct 39 ms 4988 KB Output is correct
13 Correct 10 ms 4988 KB Output is correct
14 Correct 118 ms 5696 KB Output is correct
15 Correct 128 ms 7220 KB Output is correct
16 Correct 16 ms 7220 KB Output is correct
17 Correct 79 ms 7220 KB Output is correct
18 Correct 43 ms 7220 KB Output is correct