Submission #613928

#TimeUsernameProblemLanguageResultExecution timeMemory
613928MounirComparing Plants (IOI20_plants)C++14
0 / 100
4074 ms296 KiB
#include "plants.h"
#include <bits/stdc++.h>
#define all(x) x.begin(), x.end()
#define chmax(x, v) x = max(x, v)
#define chmin(x, v) x = min(x, v)
#define pb push_back
#define pii pair<int, int>
#define sz(x) (int)x.size()
#define x first
#define y second
using namespace std;

vector<int> num;

void init(int k, vector<int> plusGros) {
	int nVals = sz(plusGros);
	vector<int> fait(nVals, 0);
	num.resize(nVals);
	
	vector<int> candidats;
	int tour = 0;
	while (tour < nVals){
		if (candidats.empty()){
			for (int i = 0; i < nVals; ++i){
				if (!fait[i] && plusGros[i] == k - 1)
					candidats.pb(i);
			}
			int depart = 0;
			for (int i = 0; i < sz(candidats) - 1; ++i){
				if ((candidats[i] + k)%nVals <= candidats[i + 1])
					depart = i + 1;
			}
				
			vector<int> ordre;
			for (int delta = 0; delta < sz(candidats); ++delta)
				ordre.pb(candidats[(depart + delta)%sz(candidats)]);
			reverse(all(ordre));
			candidats = ordre;
		}
		else {
			int iMax = candidats.back();
			//cout << iMax << endl;
			candidats.pop_back();
			fait[iMax] = true;
			num[iMax] = tour++;

			for (int delta = 1; delta < k; ++delta){
				int i = iMax - delta;
				if (i < 0)
					i += nVals;
				plusGros[i]++;
			}
		}
	}
}

int compare_plants(int x, int y) {
	if (num[x] < num[y])
		return -1;
	else
		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...