#P15425. Nobody Tells

    ID: 14925 远端评测题 4000ms 512MiB 尝试: 0 已通过: 0 难度: 7 上传者: 标签>数论交互题Special JudgeO2优化Fibonacci 数列逆元二次剩余

Nobody Tells

说明

这是一道交互题。

Coola 有两个数 p,qp,q,还有一个质数 MM,我们用如下方法生成一个序列 {fi}\{f_i\}

$$\begin{cases} f_{0}=1\\ f_{1}=p\\ f_{i}=(pf_{i-1}+qf_{i-2})\bmod M,&i>1 \end{cases}$$

交互库会给定你 MM 和一个参数 LL,你最多可以向交互库查询 33 次:

  • 给出一个 LiM2L\le i\le M^2,交互库告诉你 fif_i 的值。

你的任务是,在最多 33 次查询之后猜出 (p,q)(p,q) 的值。特别地,你可以同时猜测两对 (p,q)(p,q),详见交互细节。

交互细节

本题包含多组测试。

在输入数据的第一行,交互库会给你的程序一个数 TT,表示该测试点的测试数据组数。

对于每组测试数据:

交互库会获得该测试数据的 (p,q)(p,q)。这同时也说明交互库是非自适应性的

第一行,交互库向你的程序输入两个数 M,LM,L,表示模数与询问限制。

对于每次询问,你需要输出 ? i,表示查询 fif_i 的值。

正常情况下,交互库会向你输入一个 [0,M)[0,M) 中的整数,表示你查询的 fif_i

若发生以下情况,交互库会立刻终止交互并强制退出程序,该测试点将被判定为不通过:

  • 询问次数超过 33
  • ii 不在 LiM2L\le i\le M^2 的范围中。

在你猜出可能的 (p,q)(p,q) 后,你需要输出 ! p1 q1 p2 q2,表示你猜测的两对 (p,q)(p,q) 分别为 (p1,q1)(p_1,q_1)(p2,q2)(p_2,q_2)。此操作不计入询问的 33 次操作中。特别地,你需要保证四个数都在 [1,M)[1,M) 的范围中,否则交互库会立刻终止交互并强制退出程序,该测试点将被判定为不通过。

若两对答案中存在一对与交互库得到的值相同,则通过了该测试数据,否则不通过,且交互库会立刻终止交互并强制退出程序。

若你通过了一个测试点中的所有测试数据,该测试点将被判定为通过。

1
5 1

3

1



? 1

? 2

! 3 2 1 1

提示

样例 #1 解释

交互库获得的数据为 p=3,q=2,M=5,L=1p=3,q=2,M=5,L=1

第一次交互,你的程序通过 ? 1\texttt{? 1} 询问 f1f_1 的值,显然 f1=p=3f_1=p=3,因此交互库向你的程序输入 33

第二次交互,你的程序通过 ? 2\texttt{? 2} 询问 f2f_2 的值,f2=(pf1+qf0)mod5=11mod5=1f_2=(pf_1+qf_0)\bmod 5=11\bmod 5=1。因此交互库向你的程序输入 11

由于 f2=(p2+q)mod5f_2=(p^2+q)\bmod 5,而我们知道 p=3p=3,可以解出 q=2q=2。所以你已经用两次询问确定了答案,可以输出 ! 3 2 1 1\texttt{! 3 2 1 1}。由于第一对答案正确,第二对答案是多少就无关紧要了,所以 ! 3 2 4 3\texttt{! 3 2 4 3} 也是可行的输出,但 ! 3 2 1 5\texttt{! 3 2 1 5}! 3 2 0 4\texttt{! 3 2 0 4} 都不是,因为要保证四个数都在 [1,5)[1,5) 的范围内。

数据范围

本题开启捆绑测试。

对于 100%100\% 的数据,1T1051\le T\le 10^5106M10910^6\le M\le 10^9,保证 MM质数0L5×1050\le L\le 5\times 10^5

交互库不是自适应的1p,q<M1\le p,q<M

子任务 特殊性质 得分
1 L=1L=1 22
2 T500T\le 500L=15L=15 1010
3 M=106+3M=10^6+3 2020
4 T10T\le 10M5×106M\le 5\times 10^6
5 4848

后记

:::epigraph[——《Nobody Tells》] 过程中指路的灯火
你是其中一盏 :::