#P6716. [CCO2018] Gradient Descent
[CCO2018] Gradient Descent
题目背景
本题为交互题。
题目描述
Troy 要和您一起玩游戏,他的游戏要用一个 的棋盘。
现在给定 个棋子(从 编号到 ),第 个棋子放置在 处,同一格可能有多个棋子。
Troy 可以在一秒内将一个棋子移动到与其垂直或水平相邻的格子中,格子的分数就被 Troy 定义为将这 个棋子挪到这个格子的秒数的最小值,您要做的就是找棋盘中格子里的分数的最小值。
Troy 不会告诉您 的值和每个棋子的位置,但是您可以问 Troy 最多 个问题:格子 的分数。
交互策略
本题为交互题。
首先,读入三个整数 代表整个棋盘的大小,和您最多能问多少个问题。
读入完这一行后,您的程序将会对提出关于 的分数的问题(格式为 ? p q
),然后您就会得到一个整数 带包这个格子的分数。
一旦您的程序确定了棋盘中的格子的分数的最小值,那么就会输出 ! Z
并终止程序, 就代表最终结果。
在输出每一行后,都应刷新缓冲区:
- C/C++:
fflush(stdout)
orcout << endl
- Java:
System.out.flush()
- Pascal:
flush(output)
如果您输出的格式有误,或者提出的问题超过了 个,您的答案就是错误的。
输入格式
None
输出格式
None
1 10 90 3
1 2
1 4
1 10
5 4 170 4
2 3
2 3
4 3
5 1
提示
样例说明
对于样例
请求 | 回答 |
---|---|
1 10 90 |
|
? 1 3 |
9 |
? 1 7 |
11 |
? 1 4 |
8 |
! 8 |
棋子的位置应该在 , 和 ,所以我们得到的所有棋盘上的分数的最小值为 (格子 的分数)。
对于样例
请求 | 回答 |
---|---|
5 4 170 |
|
? 2 4 |
11 |
? 1 4 |
15 |
? 3 3 |
7 |
! 7 |
棋子的位置应该在 ,,,。
数据规模与约定
对于 的数据,,,,,,,,。
对于 的数据,,,。
对于另外 的数据,,。
对于另外 的数据,。
对于另外 的数据,。
对于另外 的数据,。
spj 和交互库见附加文件。
说明
翻译自 Canadian Computing Olympiad 2018 Day 2 A Gradient Descent。
spj 作者:
https://www.luogu.com.cn/user/174045