Gửi bài giải

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

Tác giả:
Dạng bài

V bị lạc trong một mê cung. Ở mỗi ngã rẽ, trước mặt V luôn có ba lối: bên trái, đi thẳng và bên phải. Loay hoay mãi chưa tìm được đường ra, V tình cờ gặp L.

L biết rõ mê cung này. Theo lời L, từ chỗ hai người đang đứng, V chỉ cần liên tiếp chọn lối bên trái x lần, sau đó liên tiếp đi thẳng y lần, rồi liên tiếp chọn lối bên phải z lần là sẽ đến được lối ra. Ba số x,y,z đều là số nguyên không âm.

Thấy V mừng rỡ, L lại nảy ý định trêu chọc. L giấu ba con số ấy và chỉ cho V hỏi đúng năm câu hỏi. Mỗi lần, V được chọn ba số nguyên a,b,c, với ~0 \le a,b,c \le 100~, để hỏi giá trị của:

$$ ax+by+cz $$

Chẳng hạn, chọn ~a=2,b=0,c=1~ nghĩa là V muốn biết hai lần số ngã rẽ cần chọn lối bên trái cộng với số ngã rẽ cần chọn lối bên phải bằng bao nhiêu.

Vốn biết L rất ranh mãnh, V hiểu rằng không thể tin ngay mọi câu trả lời. Tuy vậy, V cũng biết L chỉ định trêu mình đôi chút: trong cả năm câu trả lời, L sẽ nói dối nhiều nhất một câu. Những câu còn lại đều cho đúng giá trị mà V hỏi.

V không muốn tiếp tục lang thang trong mê cung nữa. Hãy giúp V đặt năm câu hỏi và xác định chính xác x,y,z để tìm đường ra.

Phương thức tương tác

Đây là một bài toán tương tác. Chương trình của bạn sẽ trao đổi dữ liệu với chương trình chấm, đóng vai L, thông qua đầu vào chuẩn và đầu ra chuẩn. Ba giá trị x,y,z được giữ cố định trong suốt quá trình tương tác.

Không có dữ liệu đầu vào ban đầu. Chương trình của bạn phải gửi câu hỏi trước khi đọc phản hồi.

Quá trình tương tác gồm đúng 5 lượt, mỗi lượt thực hiện như sau:

  1. In ra một dòng chứa ba số nguyên a,b,c cách nhau bởi dấu cách, thỏa mãn ~0 \le a,b,c \le 100~.
  2. Xuống dòng và đẩy bộ đệm đầu ra (flush).
  3. Đọc một số nguyên r từ đầu vào chuẩn, là câu trả lời của chương trình chấm. Mọi phản hồi đều thỏa mãn ~0\le r\le10^5~.

Trong ít nhất 4 lượt, phản hồi thỏa mãn ~r=ax+by+cz~. Trong nhiều nhất 1 lượt, phản hồi có thể khác giá trị này. Cũng có thể cả 5 câu trả lời đều đúng.

Sau khi nhận đủ 5 phản hồi, in ra một dòng chứa ba số nguyên không âm x,y,z mà bạn xác định được, cách nhau bởi dấu cách. Sau đó xuống dòng, flush và kết thúc chương trình.

Ví dụ tương tác

Các hàng dưới đây được trình bày theo thứ tự thời gian. Dấu — biểu thị bên đó không gửi dữ liệu ở bước tương ứng và không phải là một phần của dữ liệu.

Chương trình của bạn in ra Chương trình chấm trả lời Giải thích
1 1 1 — V hỏi giá trị của ~x+y+z~
— 12 L trả lời 12
1 1 1 — V hỏi giá trị của ~x+y+z~
— 13 L trả lời 13
5 0 1 — V hỏi giá trị của ~5x+1z~
— 24 L trả lời 24
1 0 0 — V hỏi giá trị của ~x~
— 4 L trả lời 4
1 1 0 — V hỏi giá trị của ~x+y~
— 8 L trả lời 8
4 4 4 — V đoán lần lượt các giá trị của x,y,z

Trong ví dụ này, ba giá trị bí mật là ~x=y=z=4~. Câu trả lời thứ hai là nói dối vì ~x+y+z=12~, không phải ~13~. Bốn câu trả lời còn lại đều là nói thật. Dòng cuối cùng 4 4 4 là kết quả mà chương trình của bạn đưa ra, chương trình chấm không gửi thêm phản hồi.

Hướng dẫn nhập/xuất cho bài tương tác

Sau mỗi truy vấn, chương trình phải flush đầu ra trước khi đọc phản hồi. Nếu không, truy vấn có thể vẫn nằm trong bộ đệm và chưa được gửi tới chương trình chấm, khiến chương trình phải chờ và vượt quá giới hạn thời gian.

Với C++:

cout << a << ' ' << b << ' ' << c << endl;
// endl vừa xuống dòng, vừa flush đầu ra.

long long r;
cin >> r;

Nếu sử dụng '\n' thay cho endl, cần gọi cout.flush() trước khi đọc phản hồi.

Với Python:

print(a, b, c, flush=True)
r = int(input())

Những đoạn mã trên chỉ minh họa thao tác gửi một truy vấn và nhận một phản hồi.

Chương trình phải gửi đúng 5 truy vấn rồi mới đưa ra kết quả. Không in lời nhắc nhập dữ liệu, lời giải thích hoặc thông tin gỡ lỗi ra đầu ra chuẩn.

Lưu ý: Ví dụ tương tác không phải một tệp đầu vào thông thường để sao chép nguyên khối vào chương trình. Khi chấm, mỗi phản hồi chỉ được gửi sau khi chương trình của bạn đưa ra truy vấn tương ứng.


Đang tải...