#include "plants.h"
#include <bits/stdc++.h>
#define ALL(X) begin(X), end(X)
namespace {
using i64 = long long;
using namespace std;
template <class T>
using vec = vector<T>;
template <class T>
istream& operator>>(istream& is, vec<T>& X) {
for (auto& x : X) {
is >> x;
}
return is;
}
template <class T>
constexpr T infty = 0;
template <>
constexpr int infty<int> = 1'000'000'000;
template <>
constexpr i64 infty<i64> = 1'000'000'000'000'000'000;
bool posse = false;
int N;
vec<int> id_lt, id_gt;
struct Unionfind {
vec<int> p;
Unionfind(int N) : p(N, -1) {};
int find(int x) {
return p[x] < 0 ? x : (p[x] = find(p[x]));
}
void join(int x, int y) {
if ((x = find(x)) == (y = find(y))) {
return;
}
if (p[x] > p[y]) {
swap(x, y);
}
p[x] += exchange(p[y], x);
}
bool same(int x, int y) {
return find(x) == find(y);
}
};
}
void init(int k, std::vector<int> r) {
if (k == 2) {
posse = true;
}
N = size(r);
id_lt.resize(N), id_gt.resize(N);
Unionfind uf(N);
for (int i = 0; i < N; i++) {
int j = (i + 1) % N;
if (r[i] == 1) {
uf.join(i, j);
}
}
for (int i = 0; i < N; i++) {
id_lt[i] = uf.find(i);
}
fill(ALL(uf.p), -1);
for (int i = 0; i < N; i++) {
int j = (i + 1) % N;
if (r[i] == 0) {
uf.join(i, j);
}
}
for (int i = 0; i < N; i++) {
id_gt[i] = uf.find(i);
}
}
int compare_plants(int x, int y) {
if (!posse) {
return 0;
}
if (id_lt[x] == id_lt[y]) {
return -1;
}
else if (id_gt[x] == id_gt[y]) {
return 1;
}
else {
return 0;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |