Submission #1220630

#TimeUsernameProblemLanguageResultExecution timeMemory
1220630kunzaZa183Gondola (IOI14_gondola)C++20
100 / 100
42 ms6088 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...