流浪将军
这是一道交互题。
所以说,在 WyOJ 上暂时做不了。如果真的必须做这道题,请联系 ryp
在“文明”游戏中,两个朋友迪马和帕沙正在游戏。帕沙在几个回合前在地图上放置了“伟大将军”,而迪马甚至还没接近获得他。帕沙已经确信自己会获胜,他向迪马提议玩一个游戏:如果迪马能在战争迷雾中猜出将军的位置,那么将军将不会参与游戏。
我们认为他们的“文明”游戏在笛卡尔平面上进行,单元格是整数坐标点。迪马可以请求帕沙将将军相对于当前位置移动向量 $(\Delta x, \Delta y)$,最多 $100$ 次。
称平面上坐标为整数的点为城市。
每次请求后,帕沙: - 移动他的将军:如果请求前他在坐标为 $(x, y)$ 的单元格,那么请求后他将在 $(x', y') = (x + \Delta x, y + \Delta y)$。 - 告诉迪马,从他的首都(位于 $(0,0)$)到将军所在单元格 $(x', y')$ 的线段上有多少个城市。
迪马不能让帕沙如此轻易获胜。帮助他找到伟大将军所在的单元格。
输入数据
每个测试包含多个测试用例。第一行包含一个整数 $t$ —— 测试用例的数量($1 \le t \le 500$)。对于每个测试用例,开始与交互器的交互过程。
交互协议
与交互器的交互通过你的程序发出请求和交互器回答进行。你可以执行题目中描述的动作最多 $100$ 次。
要移动将军,输出一行格式为 “? Δx Δy”,之后将军将移动向量 $(\Delta x, \Delta y)$($|\Delta x|, |\Delta y| \le 2 \cdot 10^9$)。交互器将在一行中输出线段上的城市数量(整数坐标点),该线段连接首都 $(0,0)$ 和将军当前位置。
要输出问题的答案,输出一行格式为 “! x y”,其中 $x$ 和 $y$ 是将军的当前坐标。此输出不计入查询次数。之后交互器将输出判定 —— 如果猜测正确则为 $1$,否则为 $0$。如果答案错误,你的解法将获得 WA(Wrong Answer)判定,且交互器终止。为了避免获得不正确的判定,在得知输出的答案错误后,你的解法也应终止。
保证将军的初始位置满足 $|x|, |y| \le 10^9$。
如果在任何时候你的程序超过了 $100$ 次查询的限制,你的程序将以 WA 判定结束。
注意,$100$ 次查询的限制是针对每个测试用例的。
重要:每输出一行后必须刷新输出缓冲区,以便交互器收到你的请求。在 C++ 中可以使用 std::cout.flush(),在 Java 中使用 System.out.flush(),在 Python 中使用 sys.stdout.flush(),其他语言类似。如果程序不刷新缓冲区,将得到 TL(Time Limit Exceeded)或 IL(Idleness Limit Exceeded)判定。
评分系统
每个子任务的分数仅在所有该子任务及其所需子任务的测试通过后才会获得。在子任务中,$x_0$、$y_0$ 表示将军的初始坐标(未知)。
| 子任务 | 分数 | 附加限制 | 所需子任务 | 评测信息 | ||||
|---|---|---|---|---|---|---|---|---|
| 0 | – | 样例 | 无 | 完全 | ||||
| 1 | 8 | $x_0 = 0$ 或 $y_0 = 0$ | 无 | 首次错误 | ||||
| 2 | 10 | $ | x_0 | , | y_0 | \le 4$ | 无 | 首次错误 |
| 3 | 22 | $ | x_0 | \le 42$ | 0 | 首次错误 | ||
| 4 | 40 | $ | x_0 | , | y_0 | \le 10^6$ | 0, 2, 3 | 首次错误 |
| 5 | 20 | 无 | 0–4 | 首次错误 |
示例
输入
1
6
3
11
1
输出
? 5 5
? 3 5
? 2 0
! 10 10
备注
在示例测试中,一开始将军位于首都,即坐标 $(0,0)$。
第一次请求后,他移动到 $(5,5)$,连接他和首都的线段上有 6 个城市,坐标为:$(0,0)$, $(1,1)$, $(2,2)$, $(3,3)$, $(4,4)$, $(5,5)$。
第二次请求后,将军移动到 $(5+3,5+5) = (8,10)$,此时线段上有 3 个城市:$(0,0)$, $(4,5)$, $(8,10)$。
第三次请求后,迪马将将军移动到 $(8+2,10+0) = (10,10)$,线段上有 11 个城市:$(0,0)$, $(1,1)$, ..., $(10,10)$。
之后迪马猜测将军当前在 $(10,10)$ —— 并且猜对了。
