#L3517. 「CCO 2018 Day2」Gradient Descent
「CCO 2018 Day2」Gradient Descent
题目描述
译自 Canadian Computing Olympiad 2018 Day 2 A Gradient Descent
Troy 要和你一起玩游戏,规则如下。
他有一个 行 列的棋盘。每行按从 到 的顺序编号,每列按从 到 的顺序编号。令第 行第 列的单元格为 。
现在给定 个棋子(从 编号到 ),第 个棋子放置在 处,其中 ,。同一格可能有多个棋子。Troy 可以在一秒内将一个棋子移动到与其上下或左右相邻的格子中。格子的分数就被 Troy 定义为将这 个棋子挪到这个格子的秒数的最小值。
你要做的就是找棋盘中格子里的分数的最小值。但 Troy 不会告诉你 的值和每个棋子的位置,你可以问 Troy 最多 个问题:格子 的分数。
交互方式
首先,读入三个整数 ,分别代表整个棋盘的大小和程序最多能问多少个问题。
读入完这一行后,程序需要输出询问 的分数(格式为 ? p q)到标准输出,每个询问输出一行。然后从标准输入中一个整数 ,代表这个格子的分数。
一旦确定了棋盘中的格子的分数的最小值,程序应输出一行 ! Z 并终止, 代表最终结果。
在输出每一行后,都应刷新缓冲区:
- C/C++:
fflush(stdout)或cout << endl - Java:
System.out.flush() - Pascal:
flush(output)
如果您输出的格式有误,或者提出的问题超过了 个,将返回答案错误。
对于每组测试数据, 和每个棋子的坐标在程序运行时都是固定的。也就是说,交互系统不是适应性的。
样例交互过程 1
| 向交互程序的请求 | 交互程序的响应 |
|---|---|
1 10 90 |
|
? 1 3 |
9 |
? 1 7 |
11 |
? 1 4 |
8 |
! 8 |
样例解释
在这个样例中,棋子放在 。保证测试中使用的样例与这个样例一致。
单元格 的分数为 。
单元格 的分数为 。
单元格 的分数为 ,并且是分数最小的单元格。
这个样例中分数如下表:
| 列 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 分数 | 13 | 10 | 9 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
样例交互过程 2
| 向交互程序的请求 | 交互程序的响应 |
|---|---|
5 4 170 |
|
? 2 4 |
11 |
? 1 4 |
15 |
? 3 3 |
7 |
! 7 |
样例解释
在这个样例中,棋子放在 。
数据范围与提示
对于 的数据,
,
,
,
,
,
,
,
。
对于 的数据,,,。
对于另外 的数据,,。
对于另外 的数据,。
对于另外 的数据,。
对于另外 的数据,。