#CF2109C1. 黑客数字(简单版本)

黑客数字(简单版本)

当前没有测试数据。

  • 每个测试的时间限制:22
  • 内存限制:256256 MB

题目描述

这是一个交互式问题。

欢迎,决斗者们!在这个交互挑战中,存在一个未知的整数 xx1x1091 \le x \le 10^9)。
你需要让 xx 等于输入中给定的整数 nn

借助“电脑堺”怪兽的力量,你可以发送一条命令,执行以下操作之一:

命令 约束 结果 操作成功时 判题程序响应
add y 1018y1018-10^{18} \le y \le 10^{18} res=x+yres = x + y 1res10181 \le res \le 10^{18},则 xresx \leftarrow res "1"
否则 xx 不变 "0"
mul y 1y10181 \le y \le 10^{18} res=xyres = x \cdot y 1res10181 \le res \le 10^{18},则 xresx \leftarrow res "1"
否则 xx 不变 "0"
div y 1y10181 \le y \le 10^{18} res=x/yres = x / y yy 整除 xx,则 xresx \leftarrow res "1"
否则 xx 不变 "0"
digit res=S(x)res = S(x) xresx \leftarrow res "1"

  • S(n)S(n) 表示非负整数 nn 的各位数字之和。
    例如:S(123)=1+2+3=6S(123) = 1 + 2 + 3 = 6

你需要使用 最多 77 条命令 使 xx 等于 nn


输入格式

每个测试包含多个测试用例。
第一行包含一个整数 tt1t50001 \le t \le 5000),表示测试用例的数量。

接下来每个测试用例的第一行(也是唯一一行)包含一个整数 nn1n1091 \le n \le 10^9)。


交互格式

对于每个测试用例,先读入整数 nn

要发送命令,请按以下格式输出一行:

  • add y:将 yy 加到 xx
    判题程序会输出 "1" 表示成功(x+yx+y[1,1018][1, 10^{18}] 内),否则输出 "0"
    若成功,则更新 xx+yx \leftarrow x + y

  • mul y:将 xx 乘以正整数 yy
    判题程序会输出 "1" 表示成功(xyx \cdot y[1,1018][1, 10^{18}] 内),否则输出 "0"
    若成功,则更新 xxyx \leftarrow x \cdot y

  • div y:将 xx 除以正整数 yy
    判题程序会输出 "1" 表示成功(yy 整除 xx),否则输出 "0"
    若成功,则更新 xx/yx \leftarrow x / y

  • digit:将 xx 替换为其各位数字之和 S(x)S(x)
    判题程序总是输出 "1",并更新 xS(x)x \leftarrow S(x)

注意:命令区分大小写。

当你确定 xx 等于 nn 时,输出以下格式的一行:

  • !

此时判题程序会输出 "1" 表示 nn 等于 xx,否则输出 "-1"

注意:这个回答不计入 77 条命令的限制。


错误处理

  • 如果程序对某个测试用例发送的命令超过 77 条,或发送了无效命令,则判题程序会回复 "-1"
  • 收到 "-1" 后,程序应立即终止,否则会得到 Wrong Answer
  • 否则可能得到任何其它判题结果。

刷新输出

输出每条命令后,必须刷新输出缓冲区,否则会得到 Idleness limit exceeded

C++ 中可以使用:
fflush(stdout)cout.flush()


交互示例

输入:

2

100

0

1

1

1

5

1

1

1

输出:


add -10

add 1

mul 10

!

digit

div 2

!

说明

  • 第一组测试:未知数 x=9x = 9,需要让 x=n=100x = n = 100

    • add -10 → 返回 "0",因为 9+(10)09 + (-10) \le 0xx 仍为 99
    • add 1 → 返回 "1"x=10x = 10
    • mul 10 → 返回 "1"x=100x = 100
    • ! → 返回 `"1",正确
  • 第二组测试:未知数 x=1234x = 1234,需要让 x=n=5x = n = 5

    • digitx=1+2+3+4=10x = 1+2+3+4 = 10
    • div 2x=10/2=5x = 10 / 2 = 5
    • ! → 返回 `"1",正确

示例中的空行仅为清晰起见,实际交互中不会出现。