Submission #1226284

#TimeUsernameProblemLanguageResultExecution timeMemory
1226284chaeryeongCoreputer (IOI23_coreputer)C++20
0 / 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;
	while (l <= r) {
		int m = (l + r) / 2;
		vector <int> c(n, 0);
		for (int i = 0; i <= m; i++) {
			c[i] = 1;
		}
		int s = Ask(c);
		if (s == 1) {
			l = m + 1;
		} else {
			r = m - 1; p = m; t = s;
		}
	}
	assert(p != -1);
	vector <int> ans(n, 0);
	ans[p] = 1;
	int cnt = 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;
		if (Ask(c) != t) {
			ans[i] = 1; cnt++;
		}
	}
	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 = ans;
				for (int j = l; j <= m; j++) {
					c[j] = 1;
				}
				if (Ask(c) == t) {
					l = m + 1;
				} else {
					r = m;
				}
			}
			cnt--;
			ans[l] = 1;
			break;
		}
		vector <int> c = ans;
		c[i] = 1;
		if (Ask(c) != t) {
			cnt--; ans[i] = 1;
		}
	}
	for (auto &i : ans) {
		i = 1 - i;
	}
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...