Submission #1226293

#TimeUsernameProblemLanguageResultExecution timeMemory
1226293chaeryeongCoreputer (IOI23_coreputer)C++20
90 / 100
0 ms408 KiB
#include "coreputer.h"
#include <bits/stdc++.h>
using namespace std;
int Ask (vector <int> x) {
	vector <int> ret;
	for (int i = 0; i < (int)x.size(); i++) {
		if (x[i]) {
			ret.push_back(i);
		}
	}
	return run_diagnostic(ret);
}
vector <int> malfunctioning_cores (int n) {
	int l = 0, r = n - 1, p = -1, t = -1;
	int v = 0;
	int flag = 0;
	while (l < r) {
		int m = (l + r) / 2;
		vector <int> c(n, 0);
		for (int i = 0; i <= m; i++) {
			c[i] = 1;
		}
		v++;
		int s = Ask(c);
		if (s == -1) {
			l = m + 1;
		} else {
			r = m; t = s;
		}
	}
	if (t == -1) {
		t = 1;
	}
	assert(v <= 4);
	p = l;
	vector <int> ans(n, 0);
	ans[p] = 1;
	int cnt = 0;
	int e = 0;
	for (int i = 0; i < p; i++) {
		vector <int> c(n, 0);
		for (int j = 0; j <= p; j++) {
			c[j] = 1;
		}
		c[i] = 0;
		e++;
		if (Ask(c) != t) {
			ans[i] = 1; cnt++;
		}
	}
	if (t == 0) cnt++;
	assert(e == p);
	for (int i = p + 1; i < n; i++) {
		if (cnt == 1) {
			int l = i, r = n - 1;
			while (l < r) {
				int m = (l + r) / 2;
				vector <int> c(n, 0);
				for (int j = 0; j <= p; j++) {
					c[j] = 1;
				}
				for (int j = l; j <= m; j++) {
					c[j] = 1;
				}
				if (t == 1) {
					c[p] = 0;
				}
				int z = Ask(c);
				e++;
				if ((t == 1 && z != -1) || (t == 0 && z != 0)) {
					r = m;
				} else {
					l = m + 1;
				}
			}
			cnt--;
			ans[l] = 1;
			break;
		}
		vector <int> c(n, 0);
		for (int j = 0; j <= p; j++) {
			c[j] = 1;
		}
		if (t == 1) {
			c[p] = 0;
		}
		c[i] = 1;
		int z = Ask(c);
		if ((t == 1 && z != -1) || (t == 0 && z != 0)) {
			cnt--; ans[i] = 1;
		}
	}
	//assert(e <= n - 2);
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...