제출 #1059988

#제출 시각아이디문제언어결과실행 시간메모리
1059988AmirAli_H1Rarest Insects (IOI22_insects)C++17
47.50 / 100
148 ms964 KiB
// In the name of Allah

#include <bits/stdc++.h>
#include "insects.h"
using namespace std;

typedef		long long			ll;
typedef		pair<int, int>		pii;
typedef		pair<ll, ll>		pll;

#define		endl				'\n'
#define		sep					' '
#define		F					first
#define		S					second
#define		Mp					make_pair
#define		pb					push_back
#define		all(x)				(x).begin(),(x).end()
#define		len(x)				((ll) (x).size())

const int maxn = 2000 + 4;

int n, k;
set<int> st; int res;
vector<int> ls;

void addx(int j) {
	st.insert(j); move_inside(j);
}

void delx(int j) {
	st.erase(j); move_outside(j);
}

int askx() {
	return press_button();
}

void del_all() {
	while (!st.empty()) {
		int j = *st.begin();
		delx(j);
	}
}

bool ok1(ll x) {
	del_all();
	for (int i = 0; i < n; i++) {
		addx(i);
		if (askx() > x) delx(i);
	}
	return (len(st) == k * x);
}

int solve1(int R) {
	int l = 1, r = R + 1;
	while (r - l > 1) {
		int mid = (l + r) / 2;
		if (ok1(mid)) l = mid;
		else r = mid;
	}
	return l;
}

int solve2(int R) {
	return 0;
}

int min_cardinality(int N) {
	n = N;
	
	for (int i = 0; i < n; i++) {
		addx(i);
		if (askx() >= 2) delx(i);
	}
	for (int j : st) ls.pb(j);
	k = len(ls);
	
	del_all();
	if (1) return solve1(n / k);
	else return solve2(k);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...