제출 #1206583

#제출 시각아이디문제언어결과실행 시간메모리
1206583avighnaCOVID tests (CEOI24_covid)C++20
49.01 / 100
515 ms448 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; 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; } std::string q(n, '0'); for (int i = l; i <= r; ++i) { q[idx[i]] = '1'; } std::cout << "Q " << q << std::endl; char c; 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.64) / 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.03) { 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...