Hồ sơ tội phạm
Đề bài
Mô tả
Mọi số nguyên không âm đều có biểu diễn trong hệ cơ số . Ta gọi mỗi chữ số của biểu diễn đó là một k-it.
Với hai k-it và , XOR cơ số k của chúng được định nghĩa là .
XOR cơ số của hai số nguyên và , ký hiệu , là số nhận được bằng cách lấy XOR cơ số trên từng cặp k-it tương ứng trong biểu diễn cơ số của và (số nào ngắn hơn được bổ sung các k-it ở phía trước). Chẳng hạn với : , , và , tức .
Bạn đã xâm nhập được vào kho hồ sơ tội phạm của sở cảnh sát, nhưng còn thiếu mật khẩu. Mật khẩu là một số nguyên nằm trong đoạn , và bạn được phép đoán nhiều nhất lần.
Điểm khó là hệ thống tự thay đổi mật khẩu sau mỗi lần đoán sai: nếu mật khẩu trước khi đoán là và bạn đoán số , hệ thống đổi mật khẩu thành số thoả mãn .
Hãy tìm ra mật khẩu.
Bộ tương tác là thích ứng (adaptive): mật khẩu ban đầu không được cố định từ trước và có thể phụ thuộc vào các truy vấn của bạn, nhưng luôn đảm bảo tồn tại ít nhất một mật khẩu ban đầu trong nhất quán với mọi câu trả lời đã nhận.
Dữ liệu vào
Dòng đầu tiên chứa số nguyên - số lượng bộ test.
Với mỗi bộ test, đọc vào hai số nguyên và .
Tương tác
Với mỗi bộ test, sau khi đọc và , bạn được hỏi nhiều nhất lần.
Mỗi lần hỏi, in ra một số nguyên () rồi xoá bộ đệm (flush). Sau đó đọc vào một số nguyên :
- : bạn đoán đúng mật khẩu hiện tại, hãy chuyển sang bộ test tiếp theo.
- : đoán sai, mật khẩu đã bị đổi theo quy tắc trên.
- : truy vấn không hợp lệ hoặc bạn đã vượt quá lần hỏi. Hãy kết thúc chương trình ngay lập tức.
Để flush, dùng fflush(stdout) hoặc cout.flush() trong C++, sys.stdout.flush() trong Python.
Ràng buộc
- Tổng trên tất cả các bộ test không vượt quá .
- Mỗi truy vấn phải thoả .
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 2 5 2 0 0 1 5 3 0 0 1 |
0 1 3 0 2 1 |
Cột Input là những gì hệ thống gửi cho bạn, cột Output là các lần đoán của bạn. Bộ test 1 (, ) có mật khẩu ban đầu là . Đoán sai, mật khẩu đổi thành với , tức . Đoán sai, mật khẩu đổi thành với , tức . Đoán đúng. Bộ test 2 (, ) cũng có mật khẩu ban đầu : đoán sai (mật khẩu thành vì ), đoán sai (mật khẩu vẫn là ), đoán đúng. |
| 1 1 2 1 |
0 | nên mật khẩu chắc chắn bằng , đoán ngay lần đầu là trúng. |
| 1 3 5 0 1 |
0 4 |
, , mật khẩu ban đầu là . Đoán sai, mật khẩu đổi thành với , tức . Đoán đúng. |
Bình luận