Submission #111205

#TimeUsernameProblemLanguageResultExecution timeMemory
111205IVIosabGondola (IOI14_gondola)C++17
90 / 100
26 ms2936 KiB
#include <bits/stdc++.h> #include "gondola.h" using namespace std; int MOD = 1e9 + 9; long long fast_power(long long base, long long power) { long long result = 1; while (power > 0) { if (power % 2 == 1) { result = (result * base) % MOD; } base = (base * base) % MOD; power = power / 2; } return result; } int mp[250005]; int valid(int n, int inputSeq[]) { int fx = 0, ind = 0, val = 0; for (int i = 0; i < n; i++) { int x = inputSeq[i]; if (mp[x] == 1) { return 0; } mp[x] = 1; if (x > n) { fx++; } if (x <= n) { ind = i; val = x; } } if (fx == n) { return 1; } for (int i = ind; i < ind + n; i++) { int x = inputSeq[i % n]; if (x > n) { inputSeq[i % n] = val; } else { if (x != val) { return 0; } } val++; if (val > n) { val = 1; } } return 1; } int ar[250005]; int replacement(int n, int gondolaSeq[], int replacementSeq[]) { int mx = 0; int ind = -1, val = 0; for (int i = 0; i < n; i++) { int x = gondolaSeq[i]; mx = max(mx, x); if (x <= n) { val = x; ind = i; } } if (ind == -1) { ind = 0; val = 1; } for (int i = ind; i < ind + n; i++) { ar[i % n] = val; val++; if (val > n) { val = 1; } } int hg = n + 1; priority_queue<pair<int, int>> pq; for (int i = 0; i < n; i++) { if (gondolaSeq[i] > n) pq.push({(-1) * gondolaSeq[i], ar[i]}); } int cnt = 0; while (!pq.empty()) { pair<int, int> pr = pq.top(); pq.pop(); replacementSeq[cnt] = pr.second; cnt++; for (hg; hg < pr.first * (-1); hg++) { replacementSeq[cnt] = hg; cnt++; } hg++; } return cnt; } int countReplacement(int n, int inputSeq[]) { int mx = 0,mn=1e9+5; long long ret = 1; vector<int> flex; flex.push_back(0); int fx = 0; for (int i = 0; i < n; i++) { int x = inputSeq[i]; mx = max(mx, x); mn = min(mn, x); if (x > n) { fx++; flex.push_back(x - n); } } int val = valid(n, inputSeq); if (val) { if (mx == n) { return 1; } } else { return 0; } int mul = flex.size() - 1; sort(flex.begin(), flex.end()); for (int i = 1; i < flex.size(); i++) { int x = flex[i - 1] ; ret *= fast_power(mul, ((flex[i] - x) - 1)); ret %= MOD; mul--; } if(fx==n){ ret*=n; ret%=MOD; } return ret % MOD; }

Compilation message (stderr)

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:93:16: warning: statement has no effect [-Wunused-value]
         for (hg; hg < pr.first * (-1); hg++) {
                ^
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:127:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 1; i < flex.size(); i++) {
                     ~~^~~~~~~~~~~~~
#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...