Submission #1220621

#TimeUsernameProblemLanguageResultExecution timeMemory
1220621kunzaZa183Gondola (IOI14_gondola)C++20
60 / 100
29 ms4936 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; } //---------------------- 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); 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]; } 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 ans = 1; const int MOD = 1e9 + 9; int cur = n; for (auto a : vpii) { ans *= (cur - a); ans %= MOD; cur = a; } 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...