SQRT Contest #05 - Tìm hai số nguyên

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 1G
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Kotlin, Pascal, PyPy, Python, Scratch

Đâ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:

  • yes nếu ~X_0 + V \times i \le Y~.
  • no nế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 yes hoặc no dự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

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.