Gửi bài giải


Điểm: 0,01 (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
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Trong bài toán này, có một số nguyên chưa biết ~x~ với ~1 \le x \le 10^9~. Nhiệm vụ của bạn là biến nó thành số nguyên ~n~ được cho trong input. Bằng cách sử dụng một CPU, bạn có thể gửi lệnh để thực hiện một trong các thao tác sau:

Lệnh Ràng buộc Kết quả ~res~ Điều kiện thành công Cập nhật Phản hồi từ Jury
~\texttt{add}~ ~y~ ~-10^{18} \le y \le 10^{18}~ ~res = x + y~ nếu ~1 \le res \le 10^{18}~ ~x \gets res~ 1
ngược lại ~x \gets x~ 0
~\texttt{mul}~ ~y~ ~1 \le y \le 10^{18}~ ~res = x \cdot y~ nếu ~1 \le res \le 10^{18}~ ~x \gets res~ 1
ngược lại ~x \gets x~ 0
~\texttt{div}~ ~y~ ~1 \le y \le 10^{18}~ ~res = \frac{x}{y}~ nếu ~x~ chia hết cho ~y~ ~x \gets res~ 1
ngược lại ~x \gets x~ 0
~\texttt{digit}~ ~-~ ~res = S(x)~ luôn thành công ~x \gets res~ 1

Trong đó, ~S(n)~ là hàm trả về tổng các chữ số của số nguyên không âm ~n~. Ví dụ: ~S(123) = 1 + 2 + 3 = 6~.

Bạn phải biến ~x~ thành ~n~ với càng ít thao tác càng tốt.

Input

Mỗi input gồm nhiều test case:

  • Dòng đầu chứa số nguyên ~t~ (~1 \le t \le 100~) — số lượng test case.

  • Mỗi test case gồm một dòng chứa một số nguyên ~n~ (~1 \le n \le 10^9~).

Interaction

Bạn có thể sử dụng không quá ~7~ lệnh với CPU để biến đổi từ ~x~ thành ~n~. Để gửi lệnh, bạn in ra một dòng theo đúng định dạng của một trong các lệnh sau:

  • ~\texttt{add}~ ~y~: cộng số nguyên ~y~ (~-10^{18} \le y \le 10^{18}~) vào ~x~. Jury trả ~1~ nếu ~x + y~ nằm trong ~[1, 10^{18}]~ (thành công), và khi đó cập nhật ~x \leftarrow x + y~. Nếu không, trả ~0~ và ~x~ không đổi.

  • ~\texttt{mul}~ ~y~: nhân ~x~ với số nguyên dương ~y~ (~1 \le y \le 10^{18}~). Jury trả ~1~ nếu ~x \cdot y~ nằm trong ~[1, 10^{18}]~ (thành công), và khi đó cập nhật ~x \leftarrow x \cdot y~. Nếu không, trả ~0~ và ~x~ không đổi.

  • ~\texttt{div}~ ~y~: chia ~x~ cho số nguyên dương ~y~ (~1 \le y \le 10^{18}~). Jury trả ~1~ nếu ~x~ chia hết cho ~y~ (thành công), và khi đó cập nhật ~x \leftarrow \frac{x}{y}~. Nếu không, trả ~0~ và ~x~ không đổi.

  • ~\texttt{digit}~: thay ~x~ bằng tổng chữ số của nó. Jury luôn trả ~1~ và cập nhật ~x \leftarrow S(x)~.

Lưu ý, lệnh có phân biệt chữ hoa/thường.

Khi bạn tin rằng ~x = n~, in ra ~!~. Jury sẽ trả ~1~ nếu ~x~ đúng bằng ~n~, và ~-1~ nếu ngược lại. Lệnh ~!~ không tính vào giới hạn ~7~ lệnh.

Sau mỗi lần in lệnh, bạn phải xuống dòng và flush output, nếu không sẽ bị ~\texttt{Idleness limit exceeded}~. Để flush output, dùng:

  • fflush(stdout) hoặc cout.flush() với C++.

  • System.out.flush() với Java.

  • sys.stdout.flush() với Python.

  • std::io::stdout().flush() với Rust.

  • Với các ngôn ngữ khác, vui lòng tham khảo documentation.

Nếu chương trình của bạn dùng quá ~7~ lệnh cho một test case, hoặc in ra lệnh không hợp lệ, jury sẽ trả ra ~-1~. Sau khi nhận ~-1~, chương trình của bạn phải kết thúc ngay lập tức để nhận verdict ~\texttt{Wrong Answer}~. Ngược lại, bạn có thể nhận bất kì verdict nào.

Interactor là non-adaptive: số nguyên bí mật ~x~ không thay đổi trong suốt quá trình tương tác.

Scoring

Gọi ~\tau~ là số lệnh lớn nhất của từng case bạn dùng trong một test:

  • Nếu ~5 \le \tau \le 7~, bạn nhận được ~30\%~ điểm của test đó.

  • Nếu ~\tau = 4~, bạn nhận được ~70\%~ điểm của test đó.

  • Nếu ~\tau<4~, số lệnh của bạn sẽ được so sánh với số lệnh của ban giám khảo, nếu ~\tau~ không lớn hơn giá trị của ban giám khảo, bạn nhận được toàn bộ số điểm, ngược lại nhận được ~90\%~ điểm của test.

Sample Input 1

3
9

1

0

1

1

67

1

1

420

-1

Sample Output 1

div 2

mul 1000000000000000000

digit

!

add -2

!

!

Notes

Solution Jury Giải thích
3 Có ~3~ test cases.
9 Trong test đầu, số nguyên bí mật ~x=36~, và bạn cần phải làm cho nó bằng ~n=9~.
div 2 1 Kết quả cho câu lệnh div 21, nghĩa là câu lệnh chia đã được thực hiện thành công vì ~36~ chia hết cho ~2~, và ~x~ trở thành ~\frac{36}{2}=18~ sau câu lệnh này.
mul ~10^{18}~ 0 Kết quả cho câu lệnh này là 0 vì ~x \cdot 10^{18}~ vượt quá ~10^{18}~, và ~x~ giữ nguyên giá trị ~18~ sau câu lệnh này.
digit 1 Kết quả cho câu lệnh digit luôn là 1. Lúc này ~x~ trở thành ~S(x)=3+6=9~.
! 1 Câu trả lời cho lệnh này là 1. Nghĩa là bạn đã làm cho ~x~ trở thành ~n~.
67 Trong test thứ hai, số nguyên bí mật ~x=69~, và bạn cần phải làm cho nó bằng ~n=67~.
add -2 1 Kết quả cho câu lệnh add -21 do ~x+y=69-2=67~ nằm trong giới hạn ~[1,10^{18}]~, và ~x~ trở thành ~67~ sau câu lệnh này.
! 1 Câu trả lời cho lệnh này là 1. Nghĩa là bạn đã làm cho ~x~ trở thành ~n~.
420 Trong test cuối cùng, số nguyên bí mật ~x=421~, và bạn cần phải làm cho nó bằng ~n=420~.
! -1 Bạn quyết định cầu may bằng cách không thực hiện bất kì lệnh gì. Rất tiếc trong case này ~x \neq n~, nên bạn không được điểm nào cho toàn bộ test này.

Lưu ý dòng trống trong ví dụ chỉ để giúp cho người đọc dễ quan sát, và sẽ không xuất hiện trong quá trình tương tác thực tế.


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.