trang chủ / bài tập / hamguess

Đoán vị trí trong xâu nhị phân

Đề bài

Mô tả

Đây là bài toán tương tác.

Hệ thống giữ bí mật một xâu nhị phân s độ dài n. Xâu này chắc chắn chứa ít nhất một ký tự 0 và ít nhất một ký tự 1.

Nhiệm vụ của bạn là chỉ ra một vị trí bất kỳ chứa ký tự 0 và một vị trí bất kỳ chứa ký tự 1. Các vị trí được đánh số từ 1 đến n.

Để làm điều đó, bạn được phép hỏi không quá 15 câu hỏi. Mỗi câu hỏi là một xâu nhị phân t độ dài đúng bằng n, và hệ thống trả lời bằng khoảng cách Hamming giữa ts, tức là số vị trí mà hai xâu có ký tự khác nhau.

Dữ liệu vào

Đầu tiên hệ thống in ra một dòng chứa số nguyên n.

Giao thức tương tác

Sau khi đọc n, bạn thực hiện các thao tác sau:

  • Để hỏi, in ra một dòng ? t với t là xâu nhị phân độ dài đúng n. Hệ thống trả lời bằng một dòng chứa khoảng cách Hamming giữa t và xâu bí mật s.
  • Khi đã có đáp án, in ra một dòng ! pos0 pos1, trong đó pos0 là một vị trí chứa ký tự 0pos1 là một vị trí chứa ký tự 1, rồi kết thúc chương trình. Dòng này không tính là một câu hỏi.

Nếu bạn hỏi quá 15 câu hỏi, in ra xâu truy vấn có độ dài khác n, hoặc đưa ra cặp vị trí sai, bạn sẽ nhận kết quả sai.

Quan trọng: Sau mỗi lần in ra, bạn phải flush output:

  • C++: cout << endl; hoặc cout.flush();
  • Python: print(..., flush=True)

Ràng buộc

  • 2n1000
  • Xâu bí mật chứa ít nhất một ký tự 0 và ít nhất một ký tự 1

Ví dụ

Chương trình Hệ thống Giải thích
3 n=3 (xâu bí mật là 101).
? 000 2 Xâu bí mật có đúng 2 ký tự 1.
? 100 1 Chỉ khác xâu bí mật tại vị trí 3, nên s1=1.
? 110 2 Khác tại vị trí 23, nên s2=0.
! 2 1 Vị trí 2 chứa 0, vị trí 1 chứa 1.

Với n=2 thì xâu bí mật chỉ có thể là 01 hoặc 10, và một câu hỏi duy nhất đã đủ để phân biệt hai trường hợp.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 csc 6.12.0.200 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 kotlinc 2.4.10 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0