Submission #1218369

#TimeUsernameProblemLanguageResultExecution timeMemory
1218369brintonComparing Plants (IOI20_plants)C++20
0 / 100
33 ms3144 KiB
#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(cur[i]-cur[i-1] >= k) start.push_back(cur[i]);
		}

		// move the front to back;
		int cidx = 0;
		while(cur[cidx] != start[0]) {
			cur.push_back(cur[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) {
	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;
	}
}
// 7 3 5 2 6 1 4
#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...