답안 #516111

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
516111 2022-01-20T11:44:57 Z sliviu 곤돌라 (IOI14_gondola) C++14
100 / 100
57 ms 5924 KB
#include <bits/stdc++.h>
#include <gondola.h>

using namespace std;


int valid(int n, int a[])
{
	map<int, int> mp;
	int index = -1;
	for (int i = 0; i < n; ++i) {
		if (mp.count(a[i]))
			return 0;
		++mp[a[i]];
	}
	for (int i = 0; i < n; ++i)
		if (a[i] <= n) {
			index = i;
			break;
		}
	if (index == -1)
		return 1;
	int cur = a[index];
	cur = cur == n ? 1 : cur + 1;
	for (int j = (index + 1) % n; j != index; j = (j + 1) % n, cur = cur == n ? 1 : cur + 1)
		if (a[j] <= n && a[j] != cur)
			return 0;
	return 1;
}

int replacement(int n, int a[], int ans[]) {
	vector<int> real(n);
	int index = -1, sol = 0, cur;
	for (int i = 0; i < n; ++i)
		if (a[i] <= n) {
			real[i] = a[i];
			index = i;
			break;
		}
	if (index == -1) {
		real[0] = 1;
		index = 0;
	}
	cur = real[index];
	cur = cur == n ? 1 : cur + 1;
	for (int j = (index + 1) % n; j != index; j = (j + 1) % n, cur = cur == n ? 1 : cur + 1)
		real[j] = cur;
	vector<pair<int, int>> b;
	for (int i = 0; i < n; ++i)
		if (a[i] > n)
			b.emplace_back(a[i], i);
	sort(b.begin(), b.end());
	int last = n;
	for (auto [val, idx] : b) {
		ans[sol++] = real[idx];
		for (int i = last + 1; i < val; ++i)
			ans[sol++] = i;
		last = val;
	}
	return sol;
}

int countReplacement(int n, int a[]) {
	if (!valid(n, a))
		return 0;
	const int mod = 1e9 + 9;
	vector<int> real(n);
	int index = -1, cur, sol = 1;
	for (int i = 0; i < n; ++i)
		if (a[i] <= n) {
			real[i] = a[i];
			index = i;
			break;
		}
	if (index == -1) {
		real[0] = 1;
		sol = n;
		index = 0;
	}
	cur = real[index];
	cur = cur == n ? 1 : cur + 1;
	for (int j = (index + 1) % n; j != index; j = (j + 1) % n, cur = cur == n ? 1 : cur + 1)
		real[j] = cur;
	vector<pair<int, int>> b;
	for (int i = 0; i < n; ++i)
		if (a[i] > n)
			b.emplace_back(a[i], i);
	sort(b.begin(), b.end());
	int last = n, cnt = b.size();
	auto pow = [&](int b, int e) {
		if (e < 1)
			return 1;
		int ans = 1;
		while (e) {
			if (e & 1)
				ans = 1LL * ans * b % mod;
			b = 1LL * b * b % mod, e >>= 1;
		}
		return ans;
	};
	for (auto [val, idx] : b) {
		sol = (1LL * sol * pow(cnt--, val - 1 - last)) % mod;
		last = val;
	}
	return sol;
}

Compilation message

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:54:12: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   54 |  for (auto [val, idx] : b) {
      |            ^
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:101:12: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  101 |  for (auto [val, idx] : b) {
      |            ^
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 232 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 11 ms 2188 KB Output is correct
7 Correct 8 ms 588 KB Output is correct
8 Correct 31 ms 3908 KB Output is correct
9 Correct 6 ms 1356 KB Output is correct
10 Correct 27 ms 4500 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 12 ms 2168 KB Output is correct
7 Correct 7 ms 560 KB Output is correct
8 Correct 22 ms 3908 KB Output is correct
9 Correct 6 ms 1356 KB Output is correct
10 Correct 29 ms 4500 KB Output is correct
11 Correct 0 ms 204 KB Output is correct
12 Correct 0 ms 204 KB Output is correct
13 Correct 15 ms 2032 KB Output is correct
14 Correct 0 ms 204 KB Output is correct
15 Correct 43 ms 4612 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 2 ms 332 KB Output is correct
10 Correct 1 ms 332 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 0 ms 204 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 332 KB Output is correct
11 Correct 8 ms 844 KB Output is correct
12 Correct 9 ms 972 KB Output is correct
13 Correct 27 ms 1208 KB Output is correct
14 Correct 7 ms 844 KB Output is correct
15 Correct 19 ms 2212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 296 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 1 ms 296 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1 ms 292 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 0 ms 296 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 300 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 0 ms 284 KB Output is correct
8 Correct 1 ms 280 KB Output is correct
9 Correct 43 ms 4392 KB Output is correct
10 Correct 34 ms 3632 KB Output is correct
11 Correct 17 ms 1388 KB Output is correct
12 Correct 15 ms 1840 KB Output is correct
13 Correct 4 ms 556 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 0 ms 292 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 46 ms 4392 KB Output is correct
10 Correct 31 ms 3732 KB Output is correct
11 Correct 13 ms 1556 KB Output is correct
12 Correct 19 ms 1760 KB Output is correct
13 Correct 4 ms 608 KB Output is correct
14 Correct 55 ms 5292 KB Output is correct
15 Correct 57 ms 5924 KB Output is correct
16 Correct 9 ms 1336 KB Output is correct
17 Correct 34 ms 4020 KB Output is correct
18 Correct 20 ms 2608 KB Output is correct