Submission #1232459

#TimeUsernameProblemLanguageResultExecution timeMemory
1232459kaltspielerhy드문 곤충 (IOI22_insects)C++20
0 / 100
0 ms408 KiB
#include <bits/stdc++.h>
#include "insects.h"
using namespace std;
int AJOUTER = 0;
int RETIRER = 1;

bool superiorK(int k, int nbTypes, vector<bool>& ensemble, int N, int taille, vector<bool>& elements) {
	vector<int> objets;
	vector<int> oublies;
	
	for (int i = 0; i < N; i++) {
		if (!ensemble[i]) {
			if (!elements[i]) {
				move_inside(i);
				elements[i] = true;
			}
			if (press_button() > (k+1)) {
				if (elements[i]) {
					move_outside(i);
					elements[i] = false;
				}
				oublies.push_back(i);
				elements[i] = false;
			}
			else {
				ensemble[i] = true;
				objets.push_back(i);
				taille++;
			}
		}
	}

	if (taille < k*nbTypes) {
		for (int i : objets) {
			if (elements[i]) {
				move_outside(i);
				elements[i] = false;
			}
			ensemble[i] = false;
		}
		for (int i : oublies) ensemble[i] = true;
		return false;
	}
	return true;
}

int min_cardinality(int N) {
	vector<bool> ensemble(N, false);
	vector<bool> elements(N, false);
	
	int nbTypes = 0;
	for (int i = 0; i < N; i++) {
		move_inside(i);
		if (press_button() != 1) {
			move_outside(i);
		}
		else {
			nbTypes++;
			elements[i] = true;
		}
	}

	int debut = 0, fin = ((N+nbTypes-1)/nbTypes);
	int taille = 0;
	while (debut < fin) {
		int mid = (debut+fin)/2;
		if (debut == mid) break;

		if (superiorK(mid, nbTypes, ensemble, N, taille, elements)) {
			taille = mid*nbTypes;
			debut = mid+1;
		}
		else {
			fin = mid;
		}
	}

	if (debut != fin && superiorK(debut+1, nbTypes, ensemble, N, taille, elements)) return debut+1;
	return debut;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...