QOJ.ac

QOJ

時間限制: 5 s 記憶體限制: 512 MB 總分: 100

#1400. 水瓶

统计

JOI 君居住的 IOI 市以全年炎热著称。

IOI 市是一个被划分为 $H \times W$ 个格子的长方形区域。每个格子要么是建筑物,要么是野原,要么是墙壁。建筑物共有 $P$ 个,编号从 1 到 $P$。

JOI 君只能进入建筑物或野原的格子。此外,从某个格子只能直接移动到与该格子相邻(即共享一条边)的格子,且 JOI 君在移动过程中不能离开 IOI 市。

JOI 君需要为了各种事务在不同的建筑物之间步行移动。建筑物内有空调,但野原由于阳光强烈非常炎热,每经过 1 个野原格子就需要消耗 1 单位的水。此外,由于野原没有自动售货机或饮水处,在 IOI 市移动时通常会携带水壶。容量为 $x$ 的水壶最多可以装 $x$ 单位的水。由于建筑物内有自来水,可以在建筑物内将水壶装满。

由于大水壶携带不便,JOI 君希望尽可能使用容量较小的水壶进行移动。因此,请编写一个程序,针对若干组建筑物之间的移动,求出 JOI 君完成移动所需的水壶容量的最小值。

题目描述

给定 IOI 市的地图以及 $Q$ 个询问。第 $i$ 个询问 ($1 \le i \le Q$) 为:“在建筑物 $S_i$ 和 $T_i$ 之间移动所需的水壶容量的最小值是多少?”请编写一个程序来回答这些询问。

输入格式

从标准输入读取以下数据:

  • 第 1 行包含四个整数 $H, W, P, Q$,以空格分隔。这表示 IOI 市是一个 $H \times W$ 的长方形区域,市里有 $P$ 个建筑物,询问次数为 $Q$。
  • 接下来的 $H$ 行描述了 IOI 市的地图。其中第 $r$ 行 ($1 \le r \le H$) 包含一个长度为 $W$ 的字符串,每个字符为 “.” 或 “#”。该字符串的第 $c$ 个字符 ($1 \le c \le W$) 表示 IOI 市从上往下第 $r$ 行、从左往右第 $c$ 列的格子类型,“.” 表示建筑物或野原,“#” 表示墙壁。
  • 接下来的 $P$ 行描述了 IOI 市中建筑物的位置。其中第 $j$ 行 ($1 \le j \le P$) 包含两个整数 $A_j, B_j$,以空格分隔。这表示建筑物 $j$ 位于 IOI 市从上往下第 $A_j$ 行、从左往右第 $B_j$ 列的格子中。保证在之前给出的地图中,对应的格子为 “.”。
  • 接下来的 $Q$ 行中的第 $i$ 行 ($1 \le i \le Q$) 包含两个整数 $S_i, T_i$,以空格分隔。这表示第 $i$ 个询问是关于在建筑物 $S_i$ 和 $T_i$ 之间移动所需水壶容量的最小值。

输出格式

输出 $Q$ 行。第 $i$ 行 ($1 \le i \le Q$) 输出一个整数,表示在建筑物 $S_i$ 和 $T_i$ 之间移动所需水壶容量的最小值。如果无法移动,则输出 -1。如果无需经过野原格子即可移动,则输出 0。

数据范围

所有输入数据满足以下条件:

  • $1 \le H \le 2000$
  • $1 \le W \le 2000$
  • $2 \le P \le 200000$
  • $1 \le Q \le 200000$
  • $1 \le A_j \le H$ ($1 \le j \le P$)
  • $1 \le B_j \le W$ ($1 \le j \le P$)
  • $(A_i, B_i) \neq (A_j, B_j)$ ($1 \le i < j \le P$)
  • $1 \le S_i < T_i \le P$ ($1 \le i \le Q$)

子任务

子任务 1 [10 分] 满足以下条件: $H \le 200$ $W \le 200$ * $P \le 200$

子任务 2 [30 分] 满足以下条件: $P \le 5000$ $Q = 1$

子任务 3 [30 分] 满足以下条件: $P \le 5000$ $Q \le 10000$

子任务 4 [30 分] 无额外限制。

样例

样例输入 1

5 5 4 4
.....
..##.
.#...
..#..
.....
1 1
4 2
3 3
2 5
1 2
2 4
1 3
3 4

样例输出 1

3
4
4
2

样例输入 2

5 5 3 2
...#.
..#..
#....
.##..
...#.
1 3
5 2
1 5
1 2
1 3

样例输出 2

-1
7

说明

在样例 2 中,由于建筑物 1 和建筑物 2 之间有墙壁阻隔,因此无法移动。

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download

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.