QOJ.ac

QOJ

Limite de temps : 3.0 s Limite de mémoire : 1024 MB Points totaux : 100 Interactif Hackable ✓

#17785. 天网防线

Statistiques

在一个分层防御系统中,有一个 $n \times m$ 的网格。行从上到下依次编号为 $1$ 到 $n$,列从左到右依次编号为 $1$ 到 $m$。某些格子最初包含障碍物。

一架入侵的无人机从第 $n$ 行的一个空格子出发,并试图向上突破。你需要在它到达第 $1$ 行之前放置额外的障碍物来拦截它。

假设无人机当前位于格子 $(r, c)$。如果 $r > 1$,它将在本轮中向上移动一行,其目标只能是以下三个位置之一:$(r - 1, c - 1)$,$(r - 1, c)$,$(r - 1, c + 1)$。它移动到的格子必须满足:

  • 在网格边界内;
  • 该格子中没有障碍物。

如果无人机到达第 $1$ 行,则被视为成功突破,你的程序失败。

在无人机每次移动后,如果它当前位于 $(r, c)$ 且 $r > 1$,你最多可以放置一个新障碍物。如果你选择放置一个障碍物,该障碍物必须放置在当前为空的格子 $(x, y)$ 中,且满足 $x \in \{r - 1, r - 2\}$,$1 \le x \le n$,$1 \le y \le m$。也就是说,你只能在无人机当前位置上方第一行或第二行添加障碍物。新放置的障碍物将永久保留;你也可以选择在本轮中不放置任何障碍物。

你的目标是使无人机在某个时刻无法进行任何移动,从而成功拦截它。

保证对于每个测试用例,都至少存在一种策略可以确保你在无人机到达第 $1$ 行之前将其拦截。

输入格式

第一行包含两个整数 $n$ 和 $m$($2 \le n, m \le 100$),表示网格的行数和列数。

接下来的 $n$ 行,每行包含一个长度为 $m$ 的字符串 $s_i$,描述初始网格状态:

  • 如果 $s_{i,j} = \#$,则格子 $(i, j)$ 最初包含一个障碍物;
  • 如果 $s_{i,j} = \text{.}$,则格子 $(i, j)$ 最初为空。

保证第 $n$ 行至少包含一个空格子。

最后一行包含两个整数 $r_0$ 和 $c_0$,表示无人机的初始位置 $(r_0, c_0)$。保证 $r_0 = n$ 且该格子最初为空。

在读取输入后,你将按照以下规则进行交互。

交互

在读取输入后,你将重复执行以下交互,直到过程结束:

  1. 输出两个整数 $x$ $y$。

    • 如果 $(x, y) = (0, 0)$,表示你选择在本轮中不放置障碍物;
    • 否则,表示你在格子 $(x, y)$ 处放置一个新障碍物。在这种情况下,必须满足以下条件:

      • 该格子在网格边界内;
      • 该格子当前不包含障碍物;
      • 如果无人机当前在第 $t$ 行,则必须满足 $x \in \{t - 1, t - 2\}$。
  2. 然后交互器将无人机移动一步,并输出两个整数 $r$ 和 $c$:

    • 如果 $(r, c) = (0, 0)$,表示无人机无法再进行移动,这意味着你已成功拦截它。你的程序应立即终止;
    • 如果 $(r, c) = (-1, -1)$,表示你未能拦截它。这发生在无人机已经到达第 $1$ 行或你的输出无效时。你的程序应立即终止,你将获得“Wrong answer”(答案错误);
    • 否则,无人机已移动到格子 $(r, c)$,下一轮开始。

如果你的程序在读取 $(0, 0)$ 或 $(-1, -1)$ 后继续进行交互,或者未能遵守交互协议,你也将获得“Wrong answer”。

在输出后,请刷新输出缓冲区;否则你可能会遇到“Idleness limit exceeded”(闲置超限)。例如:

  • C/C++: fflush(stdout)cout.flush()
  • Java: System.out.flush()
  • Python: sys.stdout.flush()

样例

输入样例 1

5 5
.....
.....
#.#..
..#..
.....
5 3
4 2
0 0

输出样例 1

4 4
3 2

说明

交互器可以是自适应的(adaptive)。也就是说,在交互开始之前,无人机的移动路径不一定是固定的。

初始障碍物和你在之后放置的障碍物将永久保留,永远不会消失。

无人机永远不会进入包含障碍物的格子。

你必须确保无论交互器如何移动,你的策略最终都能拦截无人机。

上述样例交互过程如下:

  • 最初,无人机位于 $(5, 3)$。
  • 在第 1 轮中,你输出 4 4,在 $(4, 4)$ 处放置一个障碍物。现在第 4 行在 $(4, 3)$ 和 $(4, 4)$ 处有障碍物,因此无人机只能移动到 $(4, 2)$。交互器随后输出 4 2
  • 在第 2 轮中,你输出 3 2,在 $(3, 2)$ 处放置一个障碍物。现在第 3 行中的格子 $(3, 1)$、$(3, 2)$、$(3, 3)$ 均无法到达。交互器随后输出 0 0,表示你已成功拦截无人机。

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.