#include "plants.h"
#include <bits/stdc++.h>
using namespace std;
vector<array<int,3>> v;// round,group,groudIdx;
void init(int k, vector<int> r) {
int N = r.size();
v.resize(N);
vector<bool> vis(N,false);
int gt = N;
while(true){
vector<int> cur;
for(int i = 0;i < N;i++){
if(vis[i]) continue;
if(r[i] == 0) cur.push_back(i);
}
if(cur.size() == 0) break;
for(auto &i:cur) vis[i] = true;
gt--;// start a new group
for(auto &i:cur){
for(int d = 1;d < k;d++){
r[(i-d+N)%N]--;
}
}
if(cur.size() == 1){
v[cur[0]] = {gt,0,0};
continue;
}
vector<int> start;
if(N-cur.back()+cur[0] >= k) start.push_back(cur[0]);
for(int i = 1;i < cur.size();i++){
if(i == 0){
continue;
}
if(cur[i]-cur[i-1] >= k) start.push_back(cur[i]);
}
assert(start.size() == 1);
// move the front to back;
int cidx = 0;
while(cur[cidx] != start[0]) {
cur.push_back(cidx);
cidx++;
}
int cg = -1;
int gidx = 0;
for(int i = cidx;i < cur.size();i++){
if(cg+1 < start.size() && start[cg+1] == cur[i]){
cg++;
gidx = 0;
}
v[cur[i]] = {gt,cg,gidx};
gidx--;
}
}
// for(auto [a,b,c]:v){
// cout << a << " " << b << " " << c << endl;
// }
}
int compare_plants(int x, int y) {
if(v[x] > v[y]){
return 1;
}else{
return -1;
}
auto [xgt,xgp,xgidx] = v[x];
auto [ygt,ygp,ygidx] = v[y];
if(xgt > ygt){
return 1;
}else if(xgt < ygt){
return -1;
}else{
if(xgp == ygp){
if(xgidx > ygidx){
return 1;
}else if(xgidx < ygidx){
return -1;
}
}
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... |