Submission #1207273

#TimeUsernameProblemLanguageResultExecution timeMemory
1207273avighnaCOVID tests (CEOI24_covid)C++20
100 / 100
507 ms452 KiB
#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; const double inf = std::numeric_limits<double>::infinity(); std::vector<double> f(n + 2); std::vector<int> split(n + 2); for (int i = 2; i <= n + 1; ++i) { std::pair<double, int> opt = {inf, -1}; double block_prob = 1 - std::pow(1 - p, i); for (int x = 1; x < i; ++x) { double p_no_a = std::pow(1 - p, x); double p_a = 1 - p_no_a; double p_b_and_no_a = p_no_a * (1 - std::pow(1 - p, i - x)); double prob_left = p_a / block_prob; double prob_right = p_b_and_no_a / block_prob; opt = std::min(opt, {1 + prob_left * f[x] + prob_right * f[i - x], x}); } f[i] = opt.first; split[i] = opt.second; } std::mt19937 gen(std::random_device{}()); std::vector<int> perm(n); std::iota(perm.begin(), perm.end(), 0); std::shuffle(perm.begin(), perm.end(), gen); 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.001 or p > 0.2) { brute_force_method(); } else { std::string ans(n, '0'); for (int i = 0; i < n; ++i) { double p_remaining = 1 - std::pow(1 - p, n - i); if (p_remaining * f[n - i + 1] + 1 < f[n - i + 1]) { std::string q(n, '0'); for (int j = i; j < n; ++j) { q[perm[j]] = '1'; } std::cout << "Q " << q << std::endl; char c; std::cin >> c; if (c == 'N') { break; } } int l = i, r = n; while (l < r) { int m = l + split[r - l + 1] - 1; std::string q(n, '0'); for (int j = l; j <= m; ++j) { q[perm[j]] = '1'; } std::cout << "Q " << q << std::endl; char c; std::cin >> c; if (c == 'P') { r = m; } else { l = m + 1; } } if (l < n) { ans[perm[l]] = '1'; } i = l; } std::cout << "A " << ans << std::endl; } char c; std::cin >> c; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...