#include <bits/stdc++.h>
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int n, t;
double p;
std::cin >> n >> p >> t;
std::mt19937 gen(std::random_device{}());
auto probabilistic_method = [&]() {
std::vector<int> a(n);
std::iota(a.begin(), a.end(), 0);
std::shuffle(a.begin(), a.end(), gen);
std::string ans(n, '0');
std::vector<int> idx;
auto solve_dnc = [&](auto &&self, int l, int r, bool left_zero) {
if (l == r and left_zero) {
ans[idx[l]] = '1';
return true;
}
char c;
if (left_zero) {
c = 'P';
} else {
std::string q(n, '0');
for (int i = l; i <= r; ++i) {
q[idx[i]] = '1';
}
std::cout << "Q " << q << std::endl;
std::cin >> c;
}
if (c == 'N') {
return false;
}
if (l == r) {
ans[idx[l]] = '0' + (c == 'P');
return c == 'P';
}
int m = (l + r) / 2;
bool b = self(self, l, m, false);
self(self, m + 1, r, !b);
return true;
};
int group_size = std::round(std::log(0.5) / std::log(1 - p));
while (!a.empty()) {
for (int i = 0; i < group_size and !a.empty(); ++i) {
idx.push_back(a.back());
a.pop_back();
}
solve_dnc(solve_dnc, 0, idx.size() - 1, false);
idx.clear();
}
std::cout << "A " << ans << std::endl;
};
auto brute_force_method = [&]() {
std::string ans(n, '0');
for (int i = 0; i < n; ++i) {
std::string q(n, '0');
q[i] = '1';
std::cout << "Q " << q << std::endl;
char c;
std::cin >> c;
ans[i] = '0' + (c == 'P');
}
std::cout << "A " << ans << std::endl;
};
while (t--) {
if (p > 0.2) {
brute_force_method();
} else if (p >= 0.02) {
probabilistic_method();
} else {
std::string ans(n, '0');
for (int i = 0; i < n; ++i) {
auto idx = *std::ranges::partition_point(std::views::iota(i, n), [&](int j) {
std::string q(n, '0');
for (int idx = i; idx <= j; ++idx) {
q[idx] = '1';
}
std::cout << "Q " << q << std::endl;
char c;
std::cin >> c;
return c == 'N';
});
if (idx < n) {
ans[idx] = '1';
}
i = idx;
}
std::cout << "A " << ans << std::endl;
}
char c;
std::cin >> c;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |