luogu#P11144. 「SFMOI Round I」Strange Madoka Game

    ID: 15069 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 难度: 3 上传者: 标签>数论洛谷原创交互题Special JudgeO2优化不定方程洛谷月赛

「SFMOI Round I」Strange Madoka Game

题目背景

English statement. You must submit your code at the Chinese version of the statement.

いつも君の側にいるから / 无论何时我都与你同在
儚すぎて / 世界如此虚幻
消えて行きそうな世界 / 似乎随时随地都会消失
だけど君がいる / 然而只要有你
それだけで守りたいと思った / 我就心甘情愿将它守护

题目描述

本题和 B2 是不同的问题,请分别仔细阅读两题题面。

这是一道交互题。

提示:我们在题目描述的最后提供了一份简要的、形式化描述的题面。

圆和焰在玩游戏。

圆在心中想了一个非负整数 mm,让焰猜出 mm 的值。当然,圆不会为难焰,所以 0m1017\textcolor{red}{0}\le m\le 10^{17}。圆不会作弊,也就是说,圆不会悄悄更换想好的数字。

焰可以问圆:对于整数 xxmmodxm\bmod x 的值是多少。焰需要用最少的询问次数来猜出 mm 的值。(为了得到全部分数,最多只能使用 22 次询问。)

圆一共和焰玩了 TT 次游戏。然而,焰的数学很差,于是她找来了你,来帮她猜出这 TT 次游戏的答案。

形式化地:有一个隐藏的非负整数 m[0,1017]m\in [\textcolor{red}{0},10^{17}]。每次询问给定整数 xx,回答 mmodxm\bmod x。用最少的询问次数找出 mm。共有 TT 组测试数据。mm 的数值在事先确定,不会根据询问变化,也就是说,交互库是非适应性的

【实现细节】

对于每个测试点,输入一行一个正整数 TT,表示游戏次数。

对于每组测试数据,你可以用以下的格式发起一次询问:

  • ? x\texttt{? }x:询问 mmodxm\bmod x 的值。你需要保证 xx整数,且 x[1,4×108]x \in \textcolor{red} {[1,4\times 10^8]}

    从标准输入流读入一个整数表示答案。特别地,若整数是 -1\texttt{-1},你的程序已经被判定为 Wrong Answer\texttt{Wrong Answer},此时你需要立刻终止程序。

你可以用以下的格式回答答案:

  • ! m\texttt{! }m:回答 mm 的值。

在发起询问后,需要刷新缓冲区,否则可能导致 TLE。

  • 在 C++ 中,使用 fflush(stdout)cout.flush()。 特别地,利用 std::endl 来换行也会刷新缓冲区。
  • 在 Pascal 中,使用 flush(output)
  • 在 Python 中,使用 stdout.flush()
  • 对于其它语言,可自行查阅文档。

输入格式

见【实现细节】。

输出格式

见【实现细节】。

1

1

2

? 2

? 3

! 5

提示

数据范围

对于 100%100\% 的数据,保证 1T1001\le T\le 100mm 为非负整数,0m1017\textcolor{red}{0}\le m\le 10^{17}

评分方式

记单个测试点中,你的询问次数的最大值为 QQ。则得分 score\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} $$

本题得分为所有测试点得分的最小值。

本题数据点的范围是非严格单调递增的。