「SFMOI Round I」Strange Homura Game
题目背景
[English statement](https://www.luogu.com.cn/problem/T514577). **You must submit your code at the Chinese version of the statement.**
> 伝えたいコトバは たったひとつ / 想要传达的言语 唯有一个 \
> キミがいたから 強くなれた / 因有你在 我变坚强了 \
> 2 人ならどんな空も飛べるね / 只要两人一起就能任意飞翔 \
> キミをいつでも 信じてるから / 因为一直都 坚信着你 \
> ずっとずっと夢を見ていよう / 能同做此梦不复醒吧
题目描述
**本题和 B1 是不同的问题,请分别仔细阅读两题题面。**
**这是一道交互题。**
**提示**:我们在题目描述的最后提供了一份简要的、形式化描述的题面。
焰和圆在玩游戏。
焰在心中想了一个正整数 $m$,让圆猜出 $m$ 的值。当然,焰不会为难圆,所以 $\textcolor{red}{2}\le m\le 10^{17}$。焰不会作弊,也就是说,**焰不会悄悄更换想好的数字。**
圆可以问焰:对于**非负**整数 $x$,$x\bmod m$ 的值是多少。圆需要用最少的询问次数来猜出 $m$ 的值。(为了得到全部分数,最多只能使用 $2$ 次询问。)
焰一共和圆玩了 $T$ 次游戏。圆的数学很好,在 $\varepsilon $ 秒内就秒了这题,但是她在军训,于是她找来了你,来帮她猜出这 $T$ 次游戏的答案。
**形式化地**:有一个隐藏的正整数 $m\in [\textcolor{red}{2},10^{17}]$。每次询问给定**非负**整数 $x$,回答 $x\bmod m$。用最少的询问次数找出 $m$。共有 $T$ 组测试数据。$m$ 的数值在事先确定,不会根据询问变化,也就是说,**交互库是非适应性的**。
【实现细节】
对于每个测试点,输入一行一个正整数 $T$,表示游戏次数。
对于每组测试数据,你可以用以下的格式发起一次询问:
- $\texttt{? }x$:询问 $x\bmod m$ 的值。你需要保证 $x$ 是**非负**整数,且 $x \in \textcolor{red}{ [0,10^{18}]}$。
从标准输入流读入一个整数表示答案。特别地,若整数是 $\texttt{-1}$,你的程序已经被判定为 $\texttt{Wrong Answer}$,此时你需要立刻终止程序。
你可以用以下的格式回答答案:
- $\texttt{! }m$:回答 $m$ 的值。
在发起询问后,需要刷新缓冲区,否则可能导致 TLE。
- 在 C++ 中,使用 `fflush(stdout)` 或 `cout.flush()`。 特别地,利用 `std::endl` 来换行也会刷新缓冲区。
- 在 Pascal 中,使用 `flush(output)`。
- 在 Python 中,使用 `stdout.flush()`。
- 对于其它语言,可自行查阅文档。
输入输出格式
输入格式
见【实现细节】。
输出格式
见【实现细节】。
输入输出样例
输入样例 #1
1
0
1
输出样例 #1
? 5
? 1
! 5
说明
#### 数据范围
对于 $100\%$ 的数据,保证 $1\le T\le 100$,$m$ 为正整数,$\textcolor{red}{2}\le m\le 10^{17}$。
#### 评分方式
记单个测试点中,你的询问次数的最大值为 $Q$。则得分 $\mathrm{score}$ 如下所示:
$$
\begin{aligned}
\mathrm{score}=\begin{cases}
0, & Q\in [101,+\infty) \\
30, & Q\in [3,101) \\
50, & Q\in [0,3) \\
\end{cases}
\end{aligned}
$$
本题得分为所有测试点得分的最小值。