제출 #737706

#제출 시각아이디문제언어결과실행 시간메모리
737706iee드문 곤충 (IOI22_insects)C++17
100 / 100
67 ms336 KiB
void move_inside(int i);
void move_outside(int i);
int press_button();
#include <bits/stdc++.h>
using namespace std;
const int MN = 2005;
mt19937 eng(time(0));
int num, k;
int a[MN];
bool b[MN], bu[MN];
void insert(int x) {
	++num;
	move_inside(x - 1);
}
void remove(int x) {
	--num;
	move_outside(x - 1);
}
int min_cardinality(int n) {
	for (int i = 1; i <= n; ++i) {
		insert(i);
		if (press_button() >= 2) {
			remove(i);
		} else {
			b[i] = 1;
			++k;
		}
	}
	if (k == 1)
		return n;
	int l = 2, r = n / k;
	while (l <= r) {
		int mid = l + r >> 1;
		for (int i = 1; i <= n; ++i)
			bu[i] = false, a[i] = i;
		shuffle(a + 1, a + n + 1, eng);
		for (int i = 1; i <= n; ++i)
			if (!b[a[i]]) {
				if (k * mid <= num) break;
				insert(a[i]);
				if (press_button() > mid) {
					remove(a[i]);
				} else {
					bu[a[i]] = 1;
				}
			}
		if (k * mid <= num) {
			l = mid + 1;
			for (int i = 1; i <= n; ++i)
				b[i] |= bu[i];
		} else {
			r = num / k;
			for (int i = 1; i <= n; ++i)
				if (bu[i]) {
					remove(i);
				} else {
					b[i] = 1;
				}
		}
	}
	return r;
}

컴파일 시 표준 에러 (stderr) 메시지

insects.cpp: In function 'int min_cardinality(int)':
insects.cpp:33:15: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   33 |   int mid = l + r >> 1;
      |             ~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...