SQRT Contest #05 - Tìm hai số nguyên
Xem dạng PDFĐây là bài toán tương tác với máy chấm (interactive)
Bạn cần phải tìm hai số nguyên ~X_0~ và ~V~, với ~0 \le X_0 \le M~ và ~-A \le V \le A~. Bạn được quyền yêu cầu máy chấm trả lời các câu hỏi. Với câu hỏi thứ ~i~, bạn có thể đưa ra một số nguyên ~Y~ và máy chấm sẽ trả lời:
yesnếu ~X_0 + V \times i \le Y~.nonếu ngược lại.
Hãy tìm ra hai số nguyên này trong ít câu hỏi nhất có thể.
Tương tác
- Đầu tiên, chương trình của bạn nhập vào ba số nguyên không âm ~M, A, \theta~ ~(0 \le M, A \le 10^9, 1 \le \theta \le 4)~, với ~\theta~ là subtask.
- Tiếp theo, chương trình của bạn và máy chấm sẽ thay phiên nhau hỏi và trả lời như sau:
- Để đặt câu hỏi, chương trình của bạn cần in ra một dòng theo định dạng ~?~ ~Y~ ~(-10^{18} \le Y \le 10^{18})~.
- Máy chấm sẽ in ra
yeshoặcnodựa trên giá trị ~Y~ của bạn.
- Sau khi có đủ thông tin, bạn in ra một dòng theo định dạng ~!~ ~X_0~ ~v~ ~(0 \le X_0 \le M, -10^9 \le V \le 10^9)~ để trả lời và kết thúc chương trình.
Lưu ý: bạn phải flush output sau khi in ra để máy chấm có thể đọc được. Trong C++, sử dụng lệnh cout << endl;. Trong Python, sử dụng lệnh sys.stdout.flush().
Chấm điểm
| Điểm | Ràng buộc bổ sung |
|---|---|
| ~9~ | ~A = 0~ |
| ~13~ | ~M = 0~ |
| ~26~ | ~M, A \le 100~ |
| ~52~ | Không có giới hạn gì thêm |
Với subtask 1, 2 và 3, chương trình của bạn có thể đặt ra tối đa ~31~ câu hỏi. Nếu sử dụng quá ~31~ câu hỏi, chương trình sẽ bị tính là Wrong answer.
Với subtask 4, chương trình của bạn có thể đặt ra không quá ~1000~ câu hỏi. Tuy nhiên, điểm của bạn cho mỗi test sẽ phụ thuộc vào số câu hỏi bạn đặt, gọi là ~X~ và được tính như sau:
- Nếu ~X \le 61~, điểm của bạn cho test đó là ~1~ điểm.
- Nếu ~61 < X \le 1000~, điểm của bạn cho test đó được tính theo công thức: $$P = 1 - 0.1 \times \log_2(X - 60)$$
- Nếu ~X > 1000~, điểm của bạn cho test đó là ~0~ điểm.
Ví dụ
| Chương trình | Máy chấm | Giải thích |
|---|---|---|
5 0 1 |
[Bạn cần đoán giá trị ~X_0 = 1, V = 0~]. Máy chấm cho bạn biết ~M = 5, A = 0~ và đây là test thuộc subtask ~1~. | |
1 |
Chương trình của bạn hỏi ~X_0 + V \times 1~ có ~\le 1~ không. | |
yes |
[~1 + 0 \times 1 = 1 \le 1~]. Máy chấm cho biết ~X_0 + v \times 1 \le 1~. | |
0 |
Chương trình của bạn hỏi ~X_0 + V \times 2~ có ~\le 0~ không. | |
no |
[~1 + 0 \times 2 = 1 > 0~]. Máy chấm cho biết ~X_0 + V \times 2 > 0~. | |
! 1 0 |
Chương trình của bạn đã đủ thông tin để kết luận ~X_0 = 1, V = 0~. |
Bình luận