QOJ.ac

QOJ

Limite de temps : 1 s Limite de mémoire : 2048 MB Points totaux : 25 Interactif

#2727. 梯度下降

Statistiques

Troy 想要和你玩一个游戏。

他有一个 $R$ 行 $C$ 列的网格。行从 $1$ 到 $R$ 编号,列从 $1$ 到 $C$ 编号。令第 $p$ 行第 $q$ 列的单元格表示为 $(p, q)$。

网格中有 $N$ 个编号为 $1$ 到 $N$ 的标记。标记 $i$ 位于 $(X_i, Y_i)$,其中 $1 \le X_i \le R$ 且 $1 \le Y_i \le C$。同一个单元格内可能有多个标记。在每一秒内,Troy 可以将一个标记移动到水平或垂直相邻的单元格。单元格的得分定义为 Troy 将所有标记移动到该单元格所需的最少秒数之和。

你的目标是找到网格中任意单元格的最小得分。遗憾的是,Troy 不会告诉你标记的数量或它们的位置。但是,你可以向他提问。你可以询问 Troy 任意单元格 $(p, q)$ 的得分。在 Troy 感到厌烦之前,你最多可以询问 $K$ 次。

交互

这是一个交互式问题:输入将根据你的程序生成的询问给出。

首先,读取一行包含三个整数 $R, C, K$ ($1 \le R, C \le 10\,000\,000$; $1 \le K \le 170$)。

在你的程序读取该行后,可以开始提问。

若要询问关于 $(p, q)$ ($1 \le p \le R; 1 \le q \le C$) 的得分,请按格式 ? p q 输出一行。然后,读取包含一个整数 $s$ ($0 \le s \le 2\,000\,000\,000$) 的一行,即 $(p, q)$ 的得分。

一旦你的程序确定了最小得分为 $Z$,请按格式 ! Z 输出一行。你的程序必须在输出此行后立即终止。

每次输出后必须刷新缓冲区,包括最后一行。刷新缓冲区的方法:在 C/C++ 中使用 fflush(stdout)cout << endl;在 Java 中使用 System.out.flush();在 Pascal 中使用 flush(output)

如果输出格式错误或询问次数超过 $K$ 次,你将获得错误判决(incorrect verdict)。

对于每个测试用例,评测系统将拥有固定的整数值 $N, R, C, K, X_1, \dots, X_N, Y_1, \dots, Y_N$ ($1 \le N \le 100; 1 \le X_i \le R; 1 \le Y_i \le C$)。这些值在程序运行期间保持不变。也就是说,评测系统不是自适应的。

子任务

  • 对于 25 分中的 5 分,$R = 1, C \le 90$ 且 $K = 90$。
  • 对于另外 5 分,$R = 1$ 且 $K = 90$。
  • 对于另外 5 分,$K = 170$。
  • 对于另外 5 分,$K = 100$。
  • 对于剩余 5 分,$K = 75$。

样例

样例输入 1

1 10 90
9
11
8

样例输出 1

? 1 3
? 1 7
? 1 4
! 8

说明 1

该样例对应位于 $(1, 2), (1, 4)$ 和 $(1, 10)$ 的标记。保证此样例与评测系统中的样例测试匹配。

单元格 $(1, 3)$ 的得分为 $1 + 1 + 7 = 9$。 单元格 $(1, 7)$ 的得分为 $5 + 3 + 3 = 11$。 单元格 $(1, 4)$ 的得分为 $2 + 0 + 6 = 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
11
15
7

样例输出 2

? 2 4
? 1 4
? 3 3
! 7

说明 2

该样例对应位于 $(2, 3), (2, 3), (4, 3)$ 和 $(5, 1)$ 的标记。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.