Submission #830546

#TimeUsernameProblemLanguageResultExecution timeMemory
830546FatihSolak드문 곤충 (IOI22_insects)C++17
52.71 / 100
145 ms404 KiB
#include "insects.h"
#include <bits/stdc++.h>
using namespace std;

int min_cardinality(int N){
	vector<int> v;
	int now = 0;
	int dif = 0;
	auto add = [&](int x){
		v.push_back(x);
		move_inside(x);
		now = press_button();
	};
	auto del = [&](){
		move_outside(v.back());
		v.pop_back();
		now = press_button();
	};
	auto del2 = [&](){
		move_outside(v.back());
		v.pop_back();
		now--;
	};
	add(0);
	dif = 1;
	for(int i = 1;i<N;i++){
		add(i);
		if(now == 2){
			del2();
		}
		else dif++;
	}
	if(dif == 1)
		return N;
	if(dif == 2){
		for(int i = 0;i<N;i++){
			if(find(v.begin(),v.end(),i) == v.end()){
				add(i);
			}
		}
		return N - now;
	}
	int l = 1,r = N/dif;
	while(l < r){
		int m = (l + r + 1)/2;
		int tmp = now;
		press_button();
		assert(now == tmp);
		if(now < m){
			for(int i = 0;i<N;i++){
				if(find(v.begin(),v.end(),i) == v.end()){
					add(i);
					if(now > m)
						del2();
				}
			}
		}
		else{
			while(now > m){
				del();
			}
			for(int i = 0;i<N;i++){
				if(find(v.begin(),v.end(),i) == v.end()){
					add(i);
					if(now > m)
						del2();
				}
			}
		}
		if(v.size() == m * dif){
			l  = m;
		}
		else r = m -1;
	}
	return l;
}

Compilation message (stderr)

insects.cpp: In function 'int min_cardinality(int)':
insects.cpp:70:15: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   70 |   if(v.size() == m * dif){
      |      ~~~~~~~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...