From 96254947699986c59f0dc63d69fd4b76bd3ed43e Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Mon, 6 Jul 2026 19:08:08 +0200 Subject: Initial commit --- 12_interactive_problems/a.out | Bin 0 -> 14296 bytes 12_interactive_problems/hidden_integer_3112.cpp | 16 ++++++++ .../hidden_permutation_3139.cpp | 45 +++++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100755 12_interactive_problems/a.out create mode 100644 12_interactive_problems/hidden_integer_3112.cpp create mode 100644 12_interactive_problems/hidden_permutation_3139.cpp (limited to '12_interactive_problems') diff --git a/12_interactive_problems/a.out b/12_interactive_problems/a.out new file mode 100755 index 0000000..c949b8e Binary files /dev/null and b/12_interactive_problems/a.out differ diff --git a/12_interactive_problems/hidden_integer_3112.cpp b/12_interactive_problems/hidden_integer_3112.cpp new file mode 100644 index 0000000..66e5a09 --- /dev/null +++ b/12_interactive_problems/hidden_integer_3112.cpp @@ -0,0 +1,16 @@ +#include +#include + +int main() { + int m, l{0}, r{1000000000}; + std::string s; + while (l+1 != r) { + m = (l+r)/2; + std::cout << "? " << m << std::endl; + std::cin >> s; + if (s == "YES") l = m; + else r = m; + } + + std::cout << "! " << r << std::endl; +} diff --git a/12_interactive_problems/hidden_permutation_3139.cpp b/12_interactive_problems/hidden_permutation_3139.cpp new file mode 100644 index 0000000..fc01d53 --- /dev/null +++ b/12_interactive_problems/hidden_permutation_3139.cpp @@ -0,0 +1,45 @@ +#include +#include +#include +#include + +void print_sol(const std::vector& v) { + std::cout << "! "; + for (size_t i = 0; i < v.size(); i++) { + for (size_t j = 0; j < v.size(); j++) { + if (v[j] == i) { + std::cout << (j+1) << " "; + break; + } + } + } + std::cout << std::endl; +} + +bool cmp(size_t i, size_t j) { + std::cout << "? " << (i+1) << " " << (j+1) << std::endl; + std::string s; + std::cin >> s; + return s == "YES"; +} + +size_t binsearch(size_t i, const std::vector& v, size_t l, size_t r) { + if (r == l) return l; + size_t m = (l+r)/2; + return cmp(i, v[m]) ? binsearch(i, v, l, m) : binsearch(i, v, m+1, r); +} + +int main() { + size_t n; + std::vector v; + std::cin >> n; + v.reserve(n); + + v.push_back(0); + for (size_t i = 1; i < n; i++) { + size_t pos = binsearch(i, v, 0, v.size()); + v.insert(std::next(v.begin(), pos), i); + } + + print_sol(v); +} -- cgit v1.3