| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 | 
|---|---|---|---|---|---|---|---|
| 1227571 | SpyrosAliv | COVID tests (CEOI24_covid) | C++20 | 5 ms | 424 KiB | 
#include <bits/stdc++.h>
using namespace std;
int N;
double P;
bool test_students(vector<bool> mask) {
    assert(mask.size() == (size_t)N);
    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';
}
vector<bool> binSearch() {
    int n = N;
    vector<bool> curr;
    for (int i = 0; i < n; i++) curr.push_back(false);
    vector<bool> ans;
    for (int i = 0; i < n; i++) ans.push_back(false);
    int idx = 0;
    while (idx < n) {
        int lo = idx;
        int hi = n-1;
        int fin = -1;
        while (lo <= hi) {
            int mid = (lo + hi) / 2;
            for (int i = idx; i <= mid; i++) curr[i] = true;
            if (test_students(curr)) {
                fin = mid;
                hi = mid-1;
            }
            else lo = mid+1;
            for (int i = idx; i <= mid; i++) curr[i] = false;
        }
        if (fin == -1) break;
        idx = fin+1;
        ans[fin] = true;
    }
    return ans;
}
vector<bool> batch(int block) {
    int n = N;
    vector<bool> curr;
    for (int i = 0; i < n; i++) curr.push_back(false);
    vector<bool> ans;
    for (int i = 0; i < n; i++) ans.push_back(false);
    for (int i = 0; i < n; i += block) {
        for (int j = i; j < i + block; j++) {
            if (j >= n) break;
            curr[j] = true;
        }
        int ex = test_students(curr);
        for (int j = i; j < i + block; j++) {
            if (j >= n) break;
            curr[j] = false;
        }
        if (!ex) continue;
        for (int j = i; j < i + block; j++) {
            curr[j] = true;
            if (test_students(curr)) {
                ans[j] = true;
            }
            curr[j] = false;
        }
    }
    return curr;
}
vector<bool> find_positive() {
    return batch(2);
}
void solve() {
    vector<bool> answer = find_positive();
     assert(answer.size() == (size_t)N);
    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; cin >> verdict;
    assert(verdict != 'W');
}
int main() {
    int T;
    scanf("%d %lf %d", &N, &P, &T);
    // You may perform any extra initialization here.
    while (T--) solve();
    return 0;
}
컴파일 시 표준 에러 (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... | ||||
