#include "gondola.h"
#include <bits/stdc++.h>
using namespace std;
int valid(int n, int inputSeq[]) {
map<int, int> mii;
for (int i = 0; i < n; i++)
mii[inputSeq[i]]++;
for (auto a : mii)
if (a.second >= 2)
return 0;
int in = min_element(inputSeq, inputSeq + n) - inputSeq;
vector<int> rep(n, -1);
if (inputSeq[in] <= n) {
int cur = inputSeq[in];
for (int i = in; i < n; i++) {
if (inputSeq[i] > n)
rep[cur] = inputSeq[i];
else if (cur != inputSeq[i])
return 0;
cur++;
if (cur == n + 1)
cur -= n;
}
for (int i = 0; i < in; i++) {
if (inputSeq[i] > n)
rep[cur] = inputSeq[i];
else if (cur != inputSeq[i])
return 0;
cur++;
if (cur == n + 1)
cur -= n;
}
} else {
for (int i = 0; i < n; i++)
rep[i] = inputSeq[i];
}
return 1;
}
//----------------------
int replacement(int n, int gondolaSeq[], int replacementSeq[]) {
int in = min_element(gondolaSeq, gondolaSeq + n) - gondolaSeq;
vector<int> rep(n, -1);
if (gondolaSeq[in] <= n) {
int cur = gondolaSeq[in];
for (int i = in; i < n; i++) {
if (gondolaSeq[i] > n)
rep[cur] = gondolaSeq[i];
cur++;
cur %= n;
}
for (int i = 0; i < in; i++) {
if (gondolaSeq[i] > n)
rep[cur] = gondolaSeq[i];
cur++;
cur %= n;
}
} else {
for (int i = 0; i < n; i++)
rep[i] = gondolaSeq[i];
}
vector<pair<int, int>> vpii;
for (int i = 0; i < n; i++) {
if (rep[i] != -1)
vpii.emplace_back(rep[i], i == 0 ? n : i);
}
// for (auto a : rep)
// cout << a << " ";
// cout << "\n";
sort(vpii.begin(), vpii.end());
// for (auto a : vpii)
// cout << a.first << " " << a.second << "\n";
int cur = n + 1;
int len = 0;
for (auto a : vpii) {
replacementSeq[len++] = a.second;
for (int i = cur; i < a.first; i++)
replacementSeq[len++] = i;
cur = a.first + 1;
}
return len;
}
//----------------------
const int MOD = 1e9 + 9;
long long logpow(int a, int b) {
if (b == 0)
return 1;
if (b == 1)
return a;
long long x = logpow(a, b / 2);
if (b % 2 == 1)
return x * x % MOD * a % MOD;
return x * x % MOD;
}
int countReplacement(int n, int inputSeq[]) {
map<int, int> mii;
for (int i = 0; i < n; i++)
mii[inputSeq[i]]++;
for (auto a : mii)
if (a.second >= 2)
return 0;
int in = min_element(inputSeq, inputSeq + n) - inputSeq;
vector<int> rep(n, -1);
long long ans = 1;
if (inputSeq[in] <= n) {
int cur = inputSeq[in];
for (int i = in; i < n; i++) {
if (inputSeq[i] > n)
rep[cur % n] = inputSeq[i];
else if (cur != inputSeq[i])
return 0;
cur++;
if (cur == n + 1)
cur -= n;
}
for (int i = 0; i < in; i++) {
if (inputSeq[i] > n)
rep[cur % n] = inputSeq[i];
else if (cur != inputSeq[i])
return 0;
cur++;
if (cur == n + 1)
cur -= n;
}
} else {
ans = n;
for (int i = 0; i < n; i++)
rep[i] = inputSeq[i];
}
// cout << "Y\n";
vector<int> vpii;
for (int i = 0; i < n; i++) {
if (rep[i] != -1)
vpii.emplace_back(rep[i]);
}
sort(vpii.begin(), vpii.end());
int cur = n;
// cout << "X\n";
// for (auto a : vpii)
// cout << a << '\n';
for (int j = 0; j < vpii.size(); j++) {
ans *= logpow(vpii.size() - j, vpii[j] - cur - 1);
ans %= MOD;
cur = vpii[j];
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |