#include "gondola.h"
#include <bits/stdc++.h>
#define mod 1000000009
using namespace std;
int valid(int n, int inputSeq[]) {
set<int> st;
vector<pair<int, int>> v;
for (int i=0 ; i<n ; i++) {
if (inputSeq[i] <= n) {
v.push_back({ inputSeq[i], i });
}
else {
if (st.find(inputSeq[i]) != st.end()) {
return 0;
}
st.insert(inputSeq[i]);
}
}
sort(v.begin(), v.end());
int sz_v = v.size();
for (int i=0 ; i<sz_v-1 ; i++) {
if (v[i].first == v[i+1].first) {
return 0;
}
if ((v[i].second + v[i+1].first - v[i].first) % n != v[i+1].second) {
return 0;
}
}
return 1;
}
//----------------------
int replacement(int n, int gondolaSeq[], int replacementSeq[]) {
int l = 0, start = -1;
vector<pair<int, int>> v;
for (int i=0 ; i<n ; i++) {
if (gondolaSeq[i] <= n) {
start = i;
break;
}
}
if (start != -1) {
int val = gondolaSeq[start] == n ? 1 : gondolaSeq[start] + 1;
for (int i=start+1 ; i<n ; i++) {
if (gondolaSeq[i] > n) {
v.push_back({ val, gondolaSeq[i] });
}
val = val == n ? 1 : val + 1;
}
for (int i=0 ; i<start ; i++) {
if (gondolaSeq[i] > n) {
v.push_back({ val, gondolaSeq[i] });
}
val = val == n ? 1 : val + 1;
}
}
else {
for (int i=0 ; i<n ; i++) {
v.push_back({ i+1, gondolaSeq[i] });
}
}
sort(v.begin(), v.end(), [](pair<int, int> a, pair<int, int> b) {
return a.second < b.second;
});
int next = n + 1;
for (pair<int, int> x : v) {
int cur = x.first, tar = x.second;
while (cur != tar) {
replacementSeq[l++] = cur;
cur = next++;
}
}
return l;
}
//----------------------
long long mop (long long a, long long b) {
long long res = 1;
while (b) {
if (b&1) {
res = (res * a) % mod;
}
b >>= 1;
a = (a * a) % mod;
}
return res;
}
int countReplacement(int n, int inputSeq[]) {
if (!valid(n, inputSeq)) {
return 0;
}
int start = -1;
vector<pair<int, int>> v;
for (int i=0 ; i<n ; i++) {
if (inputSeq[i] <= n) {
start = i;
break;
}
}
if (start != -1) {
int val = inputSeq[start] == n ? 1 : inputSeq[start] + 1;
for (int i=start+1 ; i<n ; i++) {
if (inputSeq[i] > n) {
v.push_back({ val, inputSeq[i] });
}
val = val == n ? 1 : val + 1;
}
for (int i=0 ; i<start ; i++) {
if (inputSeq[i] > n) {
v.push_back({ val, inputSeq[i] });
}
val = val == n ? 1 : val + 1;
}
}
else {
for (int i=0 ; i<n ; i++) {
v.push_back({ i+1, inputSeq[i] });
}
}
sort(v.begin(), v.end(), [](pair<int, int> a, pair<int, int> b) {
return a.second < b.second;
});
int k = v.size();
if (k == 0) {
return 1;
}
long long ans = mop(k, v[0].second - n - 1);
for (int i=1 ; i<k ; i++) {
ans *= mop(k-i, v[i].second - v[i-1].second - 1);
ans %= mod;
}
if (start == -1) {
ans *= n;
ans %= mod;
}
return ans;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
6 ms |
1344 KB |
Output is correct |
7 |
Correct |
12 ms |
2224 KB |
Output is correct |
8 |
Correct |
8 ms |
2260 KB |
Output is correct |
9 |
Correct |
4 ms |
856 KB |
Output is correct |
10 |
Correct |
15 ms |
2260 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
5 ms |
1240 KB |
Output is correct |
7 |
Correct |
12 ms |
2260 KB |
Output is correct |
8 |
Correct |
8 ms |
2068 KB |
Output is correct |
9 |
Correct |
4 ms |
860 KB |
Output is correct |
10 |
Correct |
11 ms |
2284 KB |
Output is correct |
11 |
Correct |
0 ms |
348 KB |
Output is correct |
12 |
Correct |
1 ms |
348 KB |
Output is correct |
13 |
Correct |
17 ms |
2392 KB |
Output is correct |
14 |
Correct |
1 ms |
348 KB |
Output is correct |
15 |
Correct |
17 ms |
2632 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
344 KB |
Output is correct |
4 |
Correct |
1 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
1 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
344 KB |
Output is correct |
8 |
Correct |
1 ms |
348 KB |
Output is correct |
9 |
Correct |
1 ms |
348 KB |
Output is correct |
10 |
Correct |
1 ms |
444 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
1 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
344 KB |
Output is correct |
7 |
Correct |
0 ms |
344 KB |
Output is correct |
8 |
Correct |
1 ms |
348 KB |
Output is correct |
9 |
Correct |
1 ms |
348 KB |
Output is correct |
10 |
Correct |
1 ms |
444 KB |
Output is correct |
11 |
Correct |
6 ms |
1116 KB |
Output is correct |
12 |
Correct |
6 ms |
1116 KB |
Output is correct |
13 |
Correct |
10 ms |
1412 KB |
Output is correct |
14 |
Correct |
5 ms |
1368 KB |
Output is correct |
15 |
Correct |
12 ms |
2372 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
1 ms |
344 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
1 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
0 ms |
348 KB |
Output is correct |
9 |
Correct |
26 ms |
3920 KB |
Output is correct |
10 |
Correct |
20 ms |
3160 KB |
Output is correct |
11 |
Correct |
9 ms |
1884 KB |
Output is correct |
12 |
Correct |
10 ms |
1776 KB |
Output is correct |
13 |
Correct |
2 ms |
604 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
1 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
0 ms |
352 KB |
Output is correct |
9 |
Correct |
26 ms |
3932 KB |
Output is correct |
10 |
Correct |
20 ms |
3164 KB |
Output is correct |
11 |
Correct |
11 ms |
1708 KB |
Output is correct |
12 |
Correct |
14 ms |
1880 KB |
Output is correct |
13 |
Correct |
3 ms |
600 KB |
Output is correct |
14 |
Correct |
43 ms |
5460 KB |
Output is correct |
15 |
Correct |
49 ms |
5972 KB |
Output is correct |
16 |
Correct |
7 ms |
1372 KB |
Output is correct |
17 |
Correct |
30 ms |
4188 KB |
Output is correct |
18 |
Correct |
17 ms |
2908 KB |
Output is correct |