Submission #659905

#TimeUsernameProblemLanguageResultExecution timeMemory
659905evenvalueComparing Plants (IOI20_plants)C++17
14 / 100
4051 ms9552 KiB
#include "plants.h"
#include <bits/stdc++.h>
using namespace std;

template<typename T>
using min_heap = priority_queue<T, vector<T>, greater<T>>;
template<typename T>
using max_heap = priority_queue<T, vector<T>, less<T>>;

using int64 = long long;
using ld = long double;

constexpr int kInf = 1e9 + 10;
constexpr int64 kInf64 = 1e15 + 10;
constexpr int kMod = 1e9 + 7;

vector<int> h;
int n = -1;

void init(int k, vector<int> r) {
  n = r.size();

  r.insert(r.end(), r.begin(), r.end());
  h.resize(n);

  auto dec = [&](const int i) {
    r[i]--;
    (i >= n ? r[i - n] : r[i + n])--;
  };

  vector<bool> taken(2 * n);
  for (int i = n, ht = n; ht > 0; i++) {
    if (i == 2 * n) i = n;
    if (taken[i] or r[i] != 0) continue;
    bool good = true;
    for (int j = i - k + 1; j < i; j++) {
      good &= (r[j] != 0) or taken[j];
    }
    if (not good) continue;
    for (int j = i - k + 1; j < i; j++) {
      dec(j);
    }
    taken[i] = taken[i - n] = true;
    h[i - n] = ht;
    ht--;
  }
}

int compare_plants(int x, int y) {
  return (h[x] > h[y] ? 1 : -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...