제출 #1196457

#제출 시각아이디문제언어결과실행 시간메모리
1196457TurkhuuCOVID tests (CEOI24_covid)C++20
29.94 / 100
696 ms412 KiB
#include <bits/stdc++.h>
#define FOR(i, a, b) for (auto i = (a); i <= (b); i++)
#define ROF(i, a, b) for (auto i = (a); i >= (b); i--)
using namespace std;
using ll = long long;
int n, t;
double P;
int qry(string s) {
    cout << "Q " << s << endl;
    char c;
    cin >> c;
    return c == 'P';
}
int qry(int l, int r) {
    string s(n, '0');
    FOR(i, l, r) s[i] = '1';
    return qry(s);
}
void answer(string s) {
    cout << "A " << s << endl;
    char c;
    cin >> c;
    if (c == 'W') exit(0);
}
void bodooroi() {
    string ans(n, '0');
    if (t == 300 && P == 0.2) {
        int x = 2;
        for (int i = 0; i < n; i += x) {
            if (qry(i, min(n - 1, i + x - 1))) {
                for (int j = i; j < min(n, i + x); j++) {
                    if (qry(j, j)) ans[j] = '1';
                }
            }
        }
    } else if (P >= 0.15 || t == 1) {
        FOR(i, 0, n - 1) if (qry(i, i)) ans[i] = '1';
    } else {
        for (int i = 0, lo = 0, hi = n; i < n; i = ++lo, hi = n) {
            while (lo < hi) {
                int mi = (lo + hi) / 2;
                qry(i, mi) ? hi = mi : lo = mi + 1;
            }
            if (lo < n) ans[lo] = '1';
        }
    }
    answer(ans);    
}
int main() {
    cin >> n >> P >> t;
    for (int i = t; i--; bodooroi());
    return 6/22;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...