Submission #781874

#TimeUsernameProblemLanguageResultExecution timeMemory
781874boris_mihovComparing Plants (IOI20_plants)C++17
14 / 100
4040 ms9700 KiB
#include "plants.h" #include <algorithm> #include <iostream> #include <numeric> #include <cassert> #include <vector> typedef long long llong; const int MAXN = 200000 + 10; const int INF = 1e9; int n, k; int p[MAXN]; int r[MAXN]; bool guessed[MAXN]; int getPrev(int idx) { if (idx == 1) return n; return idx - 1; } void init(int K, std::vector <int> R) { k = K; n = R.size(); for (int i = 1 ; i <= n ; ++i) { r[i] = R[i - 1]; } r[0] = -1; for (int currTry = 1 ; currTry <= n ; ++currTry) { std::vector <int> max; for (int i = 1 ; i <= n ; ++i) { if (guessed[i]) { continue; } if (r[i] == k - 1) { max.push_back(i); } } assert(max.size()); int pos = max[0]; if (max.back() >= pos + k) { for (const int &j : max) { if (pos + k <= j) { pos = j; break; } } } guessed[pos] = true; p[pos] = currTry; int idx = getPrev(pos); for (int i = 1 ; i < k ; ++i) { r[idx]++; idx = getPrev(idx); } } return; } int compare_plants(int x, int y) { x++; y++; if (p[x] < p[y]) return -1; return 1; }
#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...