답안 #959343

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
959343 2024-04-08T05:02:20 Z The_Samurai 버섯 세기 (IOI20_mushrooms) C++17
0 / 100
1 ms 372 KB
#include "mushrooms.h"
#include "bits/stdc++.h"
using namespace std;

int count_mushrooms(int n) {
	vector<int> zeros = {0};
	const int cnt = 3;
	while (zeros.size() < cnt) {
		if (use_machine({0, zeros.back() + 1}) == 0) {
			zeros.emplace_back(zeros.back() + 1);
			continue;
		}
		int lx = zeros.back() + 2, rx = n - 1, best = -1;
		int last_one = zeros.back() + 1;
		while (lx <= rx) {
			int mid = (lx + rx) >> 1;
			vector<int> v = {0};
			for (int i = last_one; i <= mid; i++) v.emplace_back(i);
			if (use_machine(v) >= 2) {
				best = mid;
				rx = mid - 1;
			} else {
				last_one = mid;
				lx = mid + 1;
			}
		}
		if (best == -1) break;
		zeros.emplace_back(best);
	}
	if (zeros.size() < cnt) return zeros.size();
	vector<int> unused;
	for (int i = zeros.back() + 1; i < n; i++) unused.emplace_back(i);
	int ans = zeros.size();
	while (!unused.empty()) {
		int ln = min(unused.size(), zeros.size());
		vector<int> v;
		for (int i = 0; i < ln; i++) {
			v.emplace_back(zeros[i]);
			v.emplace_back(unused.back());
			unused.pop_back();
		}
		ans += (use_machine(v) + 1) / 2;
	}
	return ans;
}

// 0 -> 3
// 2 -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
3 Correct 1 ms 372 KB Output is correct
4 Incorrect 0 ms 344 KB Answer is not correct.
5 Halted 0 ms 0 KB -