Submission #1291736

#TimeUsernameProblemLanguageResultExecution timeMemory
1291736Sofiatpc식물 비교 (IOI20_plants)C++20
5 / 100
49 ms8984 KiB
#include "plants.h"
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 2*1e5+5;
int d[MAXN], e[MAXN], marcd[MAXN], dd[MAXN], marce[MAXN], de[MAXN];

void init(int k, vector<int> r) {
	int n = r.size();
	for(int i = 0; i < n; i++){
		marcd[i] = -1; marce[i] = -1;
		if(r[i] == 0)e[ (i+1)%n ] = 1;
		else d[i] = 1;
	}

	for(int i = 0; i < n; i++){
		if(marcd[i] == -1 && !d[(i-1+n)%n] && d[i]){
			int cur = i;
			while(d[cur]){
				marcd[cur] = i;
				dd[ (cur+1)%n ] = dd[cur]+1;
				cur = (cur+1)%n;
			}
			marcd[cur] = i;
		}
		if(marce[i] == -1 && !e[(i+1)%n] && e[i]){
			int cur = i;
			while(e[cur]){
				marce[cur] = i;
				de[ (cur-1+n)%n ] = de[cur]+1;
				cur = (cur-1+n)%n;
			}
			marce[cur] = i;
		}
	}
	return;
}

int compare_plants(int x, int y) {
	if(marce[x] != -1 && marce[x] == marce[y]){
		if(de[x] > de[y])return 1;
		return -1;
	}
	if(marcd[x] != -1 && marcd[x] == marcd[y]){
		if(dd[x] > dd[y])return 1;
		return -1;
	}
	return 0;
}
#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...