P6716 [CCO 2018] Gradient Descent

题目背景

**本题为交互题。**

题目描述

Troy 要和您一起玩游戏,他的游戏要用一个 $R \times C$ 的棋盘。 现在给定 $N$ 个棋子(从 $1$ 编号到 $N$),第 $i$ 个棋子放置在 $(X_i,Y_i)$ 处,**同一格可能有多个棋子**。 Troy 可以在一秒内将一个棋子移动到与其垂直或水平相邻的格子中,格子的分数就被 Troy 定义为将这 $N$ 个棋子挪到这个格子的秒数的最小值,您要做的就是找棋盘中格子里的分数的最小值。 Troy 不会告诉您 $N$ 的值和每个棋子的位置,但是您可以问 Troy 最多 $K$ 个问题:格子 $(p,q)$ 的分数。 #### 交互策略 **本题为交互题。** 首先,读入三个整数 $R,C,K$ 代表整个棋盘的大小,和您最多能问多少个问题。 读入完这一行后,您的程序将会对提出关于 $(p,q)$ 的分数的问题(格式为 `? p q`),然后您就会得到一个整数 $s$ 带包这个格子的分数。 一旦您的程序确定了棋盘中的格子的分数的最小值,那么就会输出 `! Z` 并终止程序,$Z$ 就代表最终结果。 在输出每一行后,都应刷新缓冲区: - C/C++:`fflush(stdout)` or `cout

输入格式

None

输出格式

None

说明/提示

#### 样例说明 对于样例 $1$ |请求|回答| |:-:|:-:| ||`1 10 90`| |`? 1 3`|`9`| |`? 1 7`|`11`| |`? 1 4`|`8`| |`! 8`|| 棋子的位置应该在 $(1,2)$,$(1,4)$ 和 $(1,10)$,所以我们得到的所有棋盘上的分数的最小值为 $8$(格子 $(1,4)$ 的分数)。 对于样例 $2$ |请求|回答| |:-:|:-:| ||`5 4 170`| |`? 2 4`|`11`| |`? 1 4`|`15`| |`? 3 3`|`7`| |`! 7`|| 棋子的位置应该在 $(2,3)$,$(2,3)$,$(4,3)$,$(5,1)$。 #### 数据规模与约定 对于 $100\%$ 的数据,$1 \le R,C \le 10^7$,$1 \le K \le 170$,$1 \le p\le R$,$1 \le q \le C$,$0 \le s \le 2 \times 10^9$,$1 \le N \le 100$,$1 \le X_i \le R$,$1 \le Y_i \le C$。 对于 $20\%$ 的数据,$R=1$,$C \le 90$,$K=90$。 对于另外 $20\%$ 的数据,$R=1$,$K=90$。 对于另外 $20\%$ 的数据,$K = 170$。 对于另外 $20\%$ 的数据,$K = 100$。 对于另外 $20\%$ 的数据,$K=75$。 spj 和交互库见附加文件。 #### 说明 翻译自 [Canadian Computing Olympiad 2018](https://cemc.math.uwaterloo.ca/contests/computing/2018/) Day 2 [A Gradient Descent](https://cemc.math.uwaterloo.ca/contests/computing/2018/stage%202/day2.pdf)。 spj 作者:@[FZzzz](https://www.luogu.com.cn/user/174045)。