Submission #1060080

#TimeUsernameProblemLanguageResultExecution timeMemory
1060080parsadox2Rarest Insects (IOI22_insects)C++17
25 / 100
244 ms660 KiB
#include <bits/stdc++.h>
#include "insects.h"

using namespace std;

const int N = 2e3 + 10;
int n;
bool bad[N] , dead[N];

bool check(int mid)
{
	for(int i = 0 ; i < n ; i++)  if(!dead[i])
	{
		bad[i] = false;
		move_inside(i);
		int val = press_button();
		if(val > mid)
		{
			bad[i] = true;
			move_outside(i);
		}
	}
	for(int i = 0 ; i < n ; i++)  if(!bad[i] && !dead[i])
		move_outside(i);
	bool flg = true;
	vector <int> vec;
	for(int i = 0 ; i < n ; i++)  if(bad[i] && !dead[i])
	{
		flg = false;
		move_inside(i);
		int val = press_button();
		if(val > 1)
			move_outside(i);
		else
			vec.push_back(i);
	}
	if(flg)
		return true;
	for(int i = 0 ; i < n ; i++)  if(!bad[i] && !dead[i])
	{
		move_inside(i);
		int val = press_button();
		if(val == 1)
		{
			flg = true;
		}
		else
		{
			bad[i] = true;
		}
		move_outside(i);
	}
	for(auto u : vec)
		move_outside(u);
	if(!flg)
		return false;
	for(int i = 0 ; i < n ; i++)  if(bad[i])
		dead[i] = true;
	return flg;
}

int min_cardinality(int nn)
{
	n = nn;
	int low = 0 , high = n;
	while(high - low > 1)
	{
		int mid = (low + high) >> 1;
		if(check(mid))
			high = mid;
		else
			low = mid;
	}
	return high;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...