#include "plants.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define ff first
#define ss second
#define all(s) s.begin(),s.end()
#define rall(s) s.rbegin(),s.rend()
int n,k;
vector<int>r,pre,h;
int get(int x,int y){
if(x>y) return 0;
return pre[y]-(x>0?pre[x-1]:0);
}
const int maxn=300;
vector<int>g[maxn];
int ans[maxn][maxn];
void init(int K,vector<int>R){
k=K;
r=R;
n=r.size();
pre.resize(n);
pre[0]=r[0];
for(int i=1;i<n;i++){
pre[i]=pre[i-1]+r[i];
}
if(2*k>n||n<=300){
h.resize(n);
for(int t=n;t>=1;t--){
vector<int>v;
for(int i=0;i<n;i++){
if(h[i]==0&&r[i]==0) v.pb(i);
}
if(!v.empty()){
int x=v[0];
for(int i=1;i<v.size();i++){
if(v[i]-v[i-1]>=k){
x=v[i];
break;
}
}
h[x]=t;
for(int j=1;j<k;j++){
r[(x-j+n)%n]--;
}
}
}
if(n<=300){
for(int i=0;i<n;i++){
for(int t=1;t<k;t++){
if(h[i]>h[(i+t)%n]){
g[i].pb((i+t)%n);
}
else{
g[(i+t)%n].pb(i);
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
ans[i][j]=0;
}
}
for(int i=0;i<n;i++){
queue<int>q;
q.push(i);
ans[i][i]=1;
while(!q.empty()){
int x=q.front();
q.pop();
for(int y:g[x]){
if(ans[i][y]==0){
ans[i][y]=1;
q.push(y);
}
}
}
}
}
}
}
int compare_plants(int x,int y){
if(k==2){
if(get(x,y-1)==0) return 1;
if(get(y,n-1)==n-y&&get(0,x-1)==x) return 1;
if(get(x,y-1)==y-x) return -1;
if(get(y,n-1)==0&&get(0,x-1)==0) return -1;
return 0;
}
if(2*k>n&&n<=5000){
if(h[x]>h[y]) return 1;
if(h[x]<h[y]) return -1;
return 0;
}
if(n<=300){
if(ans[x][y]==1) return 1;
if(ans[y][x]==1) return -1;
return 0;
}
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... |