Tìm cận dưới trong danh sách liên kết (tương tác)
Đề bài
Mô tả
Đây là bài toán tương tác.
Có một danh sách liên kết đơn được sắp xếp tăng dần, xây dựng trên một mảng gồm phần tử. Phần tử ở vị trí chứa hai số nguyên: là giá trị lưu tại phần tử đó, và là chỉ số của phần tử kế tiếp trong danh sách (hoặc nếu đây là phần tử cuối). Danh sách được sắp xếp tăng dần, tức là nếu thì .
Bạn được cho số phần tử , chỉ số của phần tử đầu tiên , và một số nguyên . Hãy tìm số nguyên nhỏ nhất trong danh sách mà lớn hơn hoặc bằng , hoặc kết luận rằng không tồn tại số như vậy.
Bạn được phép thực hiện tối đa truy vấn dạng ? i (với ): hệ thống trả về hai số và .
Khi tìm được đáp án, in ra ! ans, trong đó là số nhỏ nhất trong danh sách lớn hơn hoặc bằng , hoặc ! -1 nếu không tồn tại. Sau lệnh này chương trình phải kết thúc.
Dữ liệu vào
Ban đầu bạn đọc một dòng gồm ba số nguyên , , — số phần tử của danh sách, chỉ số phần tử đầu tiên và số nguyên .
Sau mỗi truy vấn ? i, bạn đọc hai số nguyên và .
Dữ liệu ra
Với mỗi truy vấn, in ra một dòng dạng ? i. Khi kết thúc, in ra ! ans.
Quan trọng: Sau mỗi lần in phải flush output:
- C++:
cout << endl;hoặccout.flush(); - Python:
print(..., flush=True)
Ràng buộc
- Số truy vấn dạng
?không vượt quá .
Ví dụ
| Chương trình | Hệ thống | Giải thích |
|---|---|---|
| 5 3 80 | , , . Danh sách (theo thứ tự): . | |
| ? 3 | Hỏi phần tử . | |
| 16 2 | , . | |
| ? 2 | Hỏi phần tử . | |
| 58 5 | , . | |
| ? 5 | , . | |
| ? 4 | — dừng lại. | |
| ! 81 | Số nhỏ nhất là . |
| Chương trình | Hệ thống | Giải thích |
|---|---|---|
| 5 1 6 | Danh sách , . | |
| ? 1 | Duyệt tới cuối danh sách vẫn không có giá trị . | |
| ! -1 | Không tồn tại số . |
Bình luận