「SFMOI Round I」Strange Madoka Game
题目背景
[English statement](https://www.luogu.com.cn/problem/T510969). **You must submit your code at the Chinese version of the statement.**
> いつも君の側にいるから / 无论何时我都与你同在 \
> 儚すぎて / 世界如此虚幻 \
> 消えて行きそうな世界 / 似乎随时随地都会消失 \
> だけど君がいる / 然而只要有你 \
> それだけで守りたいと思った / 我就心甘情愿将它守护
题目描述
**本题和 B2 是不同的问题,请分别仔细阅读两题题面。**
**这是一道交互题。**
**提示**:我们在题目描述的最后提供了一份简要的、形式化描述的题面。
圆和焰在玩游戏。
圆在心中想了一个非负整数 $m$,让焰猜出 $m$ 的值。当然,圆不会为难焰,所以 $\textcolor{red}{0}\le m\le 10^{17}$。圆不会作弊,也就是说,**圆不会悄悄更换想好的数字。**
焰可以问圆:对于**正**整数 $x$,$m\bmod x$ 的值是多少。焰需要用最少的询问次数来猜出 $m$ 的值。(为了得到全部分数,最多只能使用 $2$ 次询问。)
圆一共和焰玩了 $T$ 次游戏。然而,焰的数学很差,于是她找来了你,来帮她猜出这 $T$ 次游戏的答案。
**形式化地**:有一个隐藏的非负整数 $m\in [\textcolor{red}{0},10^{17}]$。每次询问给定**正**整数 $x$,回答 $m\bmod x$。用最少的询问次数找出 $m$。共有 $T$ 组测试数据。$m$ 的数值在事先确定,不会根据询问变化,也就是说,**交互库是非适应性的**。
【实现细节】
对于每个测试点,输入一行一个正整数 $T$,表示游戏次数。
对于每组测试数据,你可以用以下的格式发起一次询问:
- $\texttt{? }x$:询问 $m\bmod x$ 的值。你需要保证 $x$ 是**正**整数,且 $x \in \textcolor{red} {[1,4\times 10^8]}$。
从标准输入流读入一个整数表示答案。特别地,若整数是 $\texttt{-1}$,你的程序已经被判定为 $\texttt{Wrong Answer}$,此时你需要立刻终止程序。
你可以用以下的格式回答答案:
- $\texttt{! }m$:回答 $m$ 的值。
在发起询问后,需要刷新缓冲区,否则可能导致 TLE。
- 在 C++ 中,使用 `fflush(stdout)` 或 `cout.flush()`。 特别地,利用 `std::endl` 来换行也会刷新缓冲区。
- 在 Pascal 中,使用 `flush(output)`。
- 在 Python 中,使用 `stdout.flush()`。
- 对于其它语言,可自行查阅文档。
输入输出格式
输入格式
见【实现细节】。
输出格式
见【实现细节】。
输入输出样例
输入样例 #1
1
1
2
输出样例 #1
? 2
? 3
! 5
说明
#### 数据范围
对于 $100\%$ 的数据,保证 $1\le T\le 100$,$m$ 为非负整数,$\textcolor{red}{0}\le m\le 10^{17}$。
#### 评分方式
记单个测试点中,你的询问次数的最大值为 $Q$。则得分 $\mathrm{score}$ 如下所示:
$$
\begin{aligned}
\mathrm{score}=\begin{cases}
0, & Q\in [81,+\infty) \\
10, & Q\in [11,81) \\
25, & Q\in [3,11) \\
50, & Q\in [0,3) \\
\end{cases}
\end{aligned}
$$
本题得分为所有测试点得分的最小值。
本题数据点的范围是非严格单调递增的。