# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1220648 | MateiKing80 | COVID tests (CEOI24_covid) | C++20 | 844 ms | 408 KiB |
#include <bits/stdc++.h>
using namespace std;
int n;
double p;
bool test_students(std::vector<bool> mask) {
assert(mask.size() == (size_t)n);
std::string mask_str(n, ' ');
for (int i = 0; i < n; i++)
mask_str[i] = mask[i] ? '1' : '0';
printf("Q %s\n", mask_str.c_str());
fflush(stdout);
char answer;
scanf(" %c", &answer);
return answer == 'P';
}
std::vector<bool> find_positive() {
vector<bool> answer(n, false);
int lastKnown = -1;
while (lastKnown < n - 1) {
int l = lastKnown + 1, r = lastKnown + 1;
if (p > 0)
r += (double)1 / p;
else
r = n - 1;
r = min(r, n - 1);
vector<bool> qry(n, false);
for (int i = l; i <= r; i ++)
qry[i] = true;
if (!test_students(qry)) {
lastKnown = r;
continue;
}
int j = l, s = r;
while (j != s) {
int mid = (j + s) / 2;
vector<bool> qry(n, false);
for (int i = j; i <= mid; i ++)
qry[i] = true;
if (!test_students(qry))
j = mid + 1;
else
s = mid;
}
answer[j] = true;
lastKnown = j;
}
return answer;
}
int main() {
int T;
scanf("%d %lf %d", &n, &p, &T);
p += p / 7;
for (int i = 0; i < T; i++) {
std::vector<bool> answer = find_positive();
assert(answer.size() == (size_t)n);
std::string answer_str(n, ' ');
for (int j = 0; j < n; j++)
answer_str[j] = answer[j] ? '1' : '0';
printf("A %s\n", answer_str.c_str());
fflush(stdout);
char verdict;
scanf(" %c", &verdict);
if (verdict == 'W')
exit(0);
}
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |