제출 #1320659

#제출 시각아이디문제언어결과실행 시간메모리
1320659dibamboo23식물 비교 (IOI20_plants)C++20
5 / 100
46 ms9016 KiB
#include "plants.h"
#include <bits/stdc++.h>

#define ll long long
#define sz size()
#define F first 
#define S second 

using namespace std;

const int N=1e6+3;

int n;
int r[N];
int p[N];
int s[N];
int p0[N];
int val[N];

bool sub1=0;

void init(int k, vector<int>inr){
	n=(int)inr.sz;
	for(int i=0;i<n;i++)r[i]=r[i+n]=inr[i];
	if(k==2){
		sub1=1;
		int cnt=0;
		for(int i=0;i<n*2;i++){
			cnt++;
			if(r[i]==0)cnt=0;
			p[i]=cnt;
		}
		cnt=0;
		for(int i=n*2-1;i>=0;i--){
			cnt++;
			if(r[i]==1)cnt=0;
			s[i]=cnt;
		}
		return;
	}
	for(int id=n;id>=1;id--){
		for(int i=0;i<n;i++){
			if(r[i]!=0)continue;
			bool t=1;
			int pre=i;
			for(int j=0;j<k-1;j++){
				pre=(pre-1+n)%n;
				if(r[pre]==0){
					t=0;
					break;
				}
			}
			if(t){
				val[i]=id;
				pre=i;
				for(int j=0;j<k-1;j++){
					pre=(pre-1+n)%n;
					r[pre]--;
				}
				break;
			}
		}
	}
	// for(int i=0;i<n;i++)cout<<val[i]<<" ";
	// cout<<"\n";
}

// 0 -  > 
// 1 -  <

int compare_plants(int x, int y) {
	if(sub1){
		int res=0;
		if(x+s[x]>=y||x+n-p[x+n-1]<=y)res=1;
		else if(y-p[n+y-1]<=x||y+s[y]>=x+n)res=-1;
		return res;
	}
	if(val[x]>val[y])return 1;
	else if(val[x]<val[y])return 0;
	else{
		assert(0);
		return -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...