Tìm cực tiểu địa phương
Đề bài
Mô tả
Đây là bài toán tương tác.
Hệ thống giữ bí mật một hoán vị của các số từ đến . Nhiệm vụ của bạn là tìm một chỉ số bất kỳ là cực tiểu địa phương.
Chỉ số () được gọi là cực tiểu địa phương nếu , trong đó quy ước . Nói cách khác, hai đầu mút của mảng được coi là lớn hơn mọi phần tử, nên chỉ cần thoả và chỉ cần thoả .
Ban đầu bạn chỉ biết giá trị , không biết gì thêm về hoán vị. Mỗi lần hỏi, bạn chọn một chỉ số và hệ thống cho bạn biết giá trị . Bạn được hỏi không quá câu hỏi.
Một mảng luôn có ít nhất một cực tiểu địa phương, và nếu có nhiều thì in ra chỉ số nào cũng được chấp nhận.
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
? ivới . Hệ thống trả lời bằng một dòng chứa giá trị . - Khi đã tìm được đáp án, in ra một dòng
! krồ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, hoặc đưa ra chỉ số không phải cực tiểu địa phương, 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
- là một hoán vị của
Ví dụ
| Chương trình | Hệ thống | Giải thích |
|---|---|---|
| 5 | (hoán vị bí mật là ). | |
| ? 3 | 1 | . |
| ? 4 | 4 | , nên cực tiểu nằm trong đoạn . |
| ? 1 | 3 | . |
| ? 2 | 2 | , nên cực tiểu nằm trong đoạn . |
| ? 2 | 2 | Hỏi lại để so cặp . |
| ? 3 | 1 | , chỉ còn chỉ số . |
| ! 3 | , đáp án đúng. |
| Chương trình | Hệ thống | Giải thích |
|---|---|---|
| 2 | (hoán vị bí mật là ). | |
| ? 1 | 1 | . |
| ? 2 | 2 | nên chỉ số là cực tiểu địa phương (vì ). |
| ! 1 | Đáp án đúng. |
Bình luận