답안 #410999

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
410999 2021-05-24T04:28:12 Z SeDunion 버섯 세기 (IOI20_mushrooms) C++17
92.623 / 100
10 ms 592 KB
#include "mushrooms.h"
#include<bits/stdc++.h>
using namespace std;

int K;

int askline(int l, int r) {
	vector<int>toquest;
	for (int i = l ; i <= r ; ++ i) toquest.emplace_back(i);
	return use_machine(toquest);
}

using vi = vector<int>;

int count_mushrooms(int n) {
	if (n == 2) {
		return 2 - use_machine({0, 1});
	}
	K = min(n, 140);
	if (K % 2 == 0) K--;
	vector<int>who(n, 2); // 0 -> A, 1 -> B, 2 -> unknown
	who[0] = 0;
	for (int p = 0 ; p < 2 ; ++ p) {
		int ret = use_machine({p, p + 1});
		who[p + 1] = who[p] ^ (ret & 1);
	}
	for (int p = 3 ; p < K - 1 ; p += 2) {
		vector<int>v = (!who[1] ? vi{0, 1} : (who[2] ? vi{1, 2} : vi{0, 2}));
		int ret = use_machine(vi{p, v[0], p + 1, v[1]});
		who[p] = (who[v[0]] && !(ret & 1)) || (!who[v[0]] && ret & 1);
		who[p + 1] = (who[v[0]] && ret <= 1) || (!who[v[0]] && (ret & 2));
	}
	array<vector<int>, 3>vecs;
	for (int i = 0 ; i < n ; ++ i) {
		vecs[who[i]].emplace_back(i);
	}
	int answer = (int)vecs[0].size();
	for (int i = 0 ; i < (int)vecs[2].size() ;) {
		auto &p = (vecs[0].size() > vecs[1].size() ? vecs[0] : vecs[1]);
		vector<int>ask;
		int l = i, r = min((int)vecs[2].size(), i + (int)p.size()) - 1;
		for (int j = l ; j <= r ; ++ j) {
			ask.emplace_back(vecs[2][j]);
			ask.emplace_back(p[j-l]);
		}
		i = r + 1;
		int ret = use_machine(ask);
		answer += (p == vecs[0] ? r-l+1 - (ret+1)/2 : (ret+1)/2);
		int first = ((p == vecs[0] && ret % 2) || (p == vecs[1] && ret % 2 == 0));
		vecs[first].emplace_back(vecs[2][l]);
	}
	return answer;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 200 KB Output is correct
2 Correct 1 ms 200 KB Output is correct
3 Correct 1 ms 200 KB Output is correct
4 Correct 1 ms 200 KB Output is correct
5 Correct 2 ms 200 KB Output is correct
6 Correct 2 ms 200 KB Output is correct
7 Correct 8 ms 584 KB Output is correct
8 Correct 7 ms 456 KB Output is correct
9 Correct 10 ms 584 KB Output is correct
10 Correct 8 ms 584 KB Output is correct
11 Partially correct 10 ms 456 KB Output is partially correct
12 Correct 7 ms 584 KB Output is correct
13 Correct 8 ms 584 KB Output is correct
14 Correct 5 ms 328 KB Output is correct
15 Partially correct 9 ms 584 KB Output is partially correct
16 Partially correct 8 ms 584 KB Output is partially correct
17 Correct 6 ms 456 KB Output is correct
18 Correct 7 ms 456 KB Output is correct
19 Partially correct 8 ms 456 KB Output is partially correct
20 Correct 8 ms 564 KB Output is correct
21 Correct 8 ms 584 KB Output is correct
22 Partially correct 10 ms 456 KB Output is partially correct
23 Correct 8 ms 584 KB Output is correct
24 Correct 5 ms 328 KB Output is correct
25 Partially correct 10 ms 584 KB Output is partially correct
26 Partially correct 8 ms 456 KB Output is partially correct
27 Partially correct 9 ms 584 KB Output is partially correct
28 Partially correct 7 ms 584 KB Output is partially correct
29 Partially correct 8 ms 456 KB Output is partially correct
30 Partially correct 8 ms 584 KB Output is partially correct
31 Partially correct 8 ms 584 KB Output is partially correct
32 Partially correct 7 ms 568 KB Output is partially correct
33 Partially correct 8 ms 584 KB Output is partially correct
34 Partially correct 7 ms 456 KB Output is partially correct
35 Partially correct 8 ms 584 KB Output is partially correct
36 Partially correct 7 ms 580 KB Output is partially correct
37 Partially correct 8 ms 584 KB Output is partially correct
38 Partially correct 10 ms 584 KB Output is partially correct
39 Partially correct 9 ms 584 KB Output is partially correct
40 Partially correct 8 ms 584 KB Output is partially correct
41 Partially correct 8 ms 584 KB Output is partially correct
42 Partially correct 8 ms 456 KB Output is partially correct
43 Partially correct 8 ms 584 KB Output is partially correct
44 Partially correct 9 ms 584 KB Output is partially correct
45 Partially correct 8 ms 584 KB Output is partially correct
46 Partially correct 9 ms 588 KB Output is partially correct
47 Partially correct 7 ms 584 KB Output is partially correct
48 Partially correct 10 ms 584 KB Output is partially correct
49 Partially correct 7 ms 456 KB Output is partially correct
50 Partially correct 10 ms 456 KB Output is partially correct
51 Partially correct 9 ms 584 KB Output is partially correct
52 Partially correct 7 ms 512 KB Output is partially correct
53 Partially correct 6 ms 584 KB Output is partially correct
54 Partially correct 8 ms 584 KB Output is partially correct
55 Partially correct 8 ms 584 KB Output is partially correct
56 Partially correct 7 ms 584 KB Output is partially correct
57 Partially correct 8 ms 584 KB Output is partially correct
58 Partially correct 8 ms 584 KB Output is partially correct
59 Partially correct 8 ms 588 KB Output is partially correct
60 Partially correct 8 ms 584 KB Output is partially correct
61 Partially correct 8 ms 592 KB Output is partially correct
62 Correct 1 ms 200 KB Output is correct
63 Correct 1 ms 200 KB Output is correct
64 Correct 1 ms 200 KB Output is correct
65 Correct 1 ms 200 KB Output is correct
66 Correct 1 ms 200 KB Output is correct
67 Correct 1 ms 200 KB Output is correct
68 Correct 1 ms 200 KB Output is correct
69 Correct 1 ms 200 KB Output is correct
70 Correct 1 ms 200 KB Output is correct
71 Correct 1 ms 200 KB Output is correct
72 Correct 1 ms 200 KB Output is correct
73 Correct 1 ms 200 KB Output is correct
74 Correct 1 ms 200 KB Output is correct
75 Correct 1 ms 200 KB Output is correct
76 Correct 1 ms 200 KB Output is correct
77 Correct 1 ms 200 KB Output is correct
78 Correct 1 ms 200 KB Output is correct
79 Correct 1 ms 200 KB Output is correct
80 Correct 1 ms 200 KB Output is correct
81 Correct 1 ms 200 KB Output is correct
82 Correct 1 ms 200 KB Output is correct
83 Correct 1 ms 200 KB Output is correct
84 Correct 1 ms 200 KB Output is correct
85 Correct 1 ms 200 KB Output is correct
86 Correct 1 ms 200 KB Output is correct
87 Correct 1 ms 200 KB Output is correct
88 Correct 1 ms 200 KB Output is correct
89 Correct 1 ms 200 KB Output is correct
90 Correct 1 ms 200 KB Output is correct
91 Correct 1 ms 200 KB Output is correct