Miếng gà ngon nhất
Xem dạng PDFHôm nay, lớp của Cam có một trò chơi trong giờ Toán. Có n miếng gà: ~p[0], p[1], \ldots, p[n - 1]~. Trong số đó có một miếng ngon nhất bí mật là ~p[b]~.
Bạn được so sánh độ ngon giữa hai miếng gà thông qua hàm find_better(i, j), hàm sẽ trả về chỉ số của miếng gà ngon hơn.
Mục tiêu: Tìm ra chỉ số của miếng gà ngon nhất, đồng thời tối ưu số lần gọi hàm find_better() trên miếng gà ngon nhất.
Interaction
Đầu tiên, đọc số nguyên ~n~ ~(2 \leq n \leq 10^5)~ trên một dòng.
Để tương tác với trình chấm, in mỗi lệnh trên một dòng riêng, lưu ý phải flush output bằng fflush(stdout) hoặc cout.flush.
Các câu lệnh:
? i j: Trình chấm gọi find_better(i, j) và trả về chỉ số của miếng gà ngon hơn.
answer b: Trả lời chỉ số của miếng gà ngon nhất là ~p[b]~ mà bạn tìm được. Chương trình phải in answer chính xác một lần.
Scoring
Nếu chương trình đưa ra kết quả answer sai, hoặc dùng quá ~10^6~ lần hỏi, hoặc bị lỗi làm chương trình kết thúc bất thường thì test đó sẽ nhận ~0~ điểm.
Ngược lại, gọi ~T~ là điểm tối đa của test đó, ~L~ là đáp án của giám khảo, và ~X~ là số lần chương trình của thí sinh gọi hàm find_better() trên miếng ngon nhất. Số điểm thí sinh nhận được cho test này được tính theo công thức:
$$\text{Điểm} = \begin{cases} T & \text{nếu } X \le L \\ \frac{\max(0, 100 - (X - L) \cdot 6)}{100} \cdot T & \text{nếu } X > L \end{cases}$$
Notes
Giả sử độ ngon của mỗi miếng lần lượt là ~[0, 3, 1, 2]~
| Chương trình | Máy chấm | Giải thích |
|---|---|---|
| 4 | Có ~n = 4~ miếng gà, chỉ số từ ~0~ đến ~3~. | |
| ? 0 1 | So sánh ~p[0]~ và ~p[1]~. | |
| 1 | Vì ~p[1] = 3~ và ~p[0] = 0~, máy chấm trả về ~1~. | |
| ? 1 2 | So sánh ứng viên hiện tại ~1~ với miếng ~2~. | |
| 1 | Vì ~p[1] = 3~ và ~p[2] = 1~, máy chấm trả về ~1~. | |
| ? 1 3 | So sánh ứng viên hiện tại ~1~ với miếng ~3~. | |
| 1 | Vì ~p[1] = 3~ và ~p[3] = 2~, máy chấm trả về ~1~. | |
| answer 1 | Kết luận miếng gà ngon nhất có chỉ số là ~1~. |

Bình luận