Submission #388212

#TimeUsernameProblemLanguageResultExecution timeMemory
388212alexxela12345Comparing Plants (IOI20_plants)C++17
0 / 100
4053 ms7244 KiB
#include <bits/stdc++.h> #include "plants.h" using namespace std; int n; int k; vector<int> r; vector<int> prefr; void genSome(); void init(int k_, std::vector<int> r_) { k = k_; r = r_; n = r.size(); prefr.resize(n + 1); for (int i = 1; i <= n; i++) { prefr[i] = prefr[i - 1] + r[i - 1]; } genSome(); } int get_sum(int l, int r) { if (l <= r) { return prefr[r] - prefr[l]; } return prefr[n] - prefr[l] + prefr[r]; } vector<int> h; void genSome() { h.resize(n, -1); vector<int> r2 = r; for (int asdf = 0; asdf < n; asdf++) { for (int i = 0; i < n; i++) { if (r2[i] == 0 && h[i] == -1) { bool bad = 0; for (int j = 1; j < k; j++) { int k = (i - j + n) % n; if (r2[k] == 0) { bad = 1; break; } } if (bad) { continue; } h[i] = n - asdf - 1; for (int j = 1; j < k; j++) { int k = (i - j + n) % n; r2[k]--; } break; } } } } int compare_plants(int x, int y) { if (k == 2) { int a = get_sum(x, y); int b = get_sum(y, x); int A = y - x; if (A < 0) A += n; int B = n - A; if (a == 0) { return 1; } else if (a == A) { return -1; } if (b == 0) { return -1; } else if (b == B) { return 1; } return 0; } if (2 * k > n) { if (h[x] > h[y]) { return 1; } else { return -1; } } assert(false); }
#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...