Đ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 độ dài . 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ừ đến .
Để làm điều đó, bạn được phép hỏi không quá câu hỏi. Mỗi câu hỏi là một xâu nhị phân độ dài đúng bằng , và hệ thống trả lời bằng khoảng cách Hamming giữa và , 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 .
Giao thức tương tác
Sau khi đọc , bạn thực hiện các thao tác sau:
- Để hỏi, in ra một dòng
? tvới là xâu nhị phân độ dài đúng . Hệ thống trả lời bằng một dòng chứa khoảng cách Hamming giữa và xâu bí mật . - Khi đã có đáp án, in ra một dòng
! pos0 pos1, trong đó là một vị trí chứa ký tự0và 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á câu hỏi, in ra xâu truy vấn có độ dài khác , 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ặccout.flush(); - Python:
print(..., flush=True)
Ràng buộc
- Xâu bí mật chứa ít nhất một ký tự
0và ít nhất một ký tự1
Ví dụ
| Chương trình | Hệ thống | Giải thích |
|---|---|---|
| 3 | (xâu bí mật là 101). | |
| ? 000 | 2 | Xâu bí mật có đúng ký tự 1. |
| ? 100 | 1 | Chỉ khác xâu bí mật tại vị trí , nên . |
| ? 110 | 2 | Khác tại vị trí và , nên . |
| ! 2 1 | Vị trí chứa 0, vị trí chứa 1. |
Với 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