P15065 [UOI 2024 II Stage] Mole

题目描述

经过一番艰苦的研究,Anton 决定去他的乡间别墅放松一下。他有一个美丽的花园,里面种着许多不同的花。但是,糟糕的是,他一到就发现地上有很多洞。是鼹鼠! 现在,Anton 将手持铁锹等待鼹鼠的出现。鼹鼠可能从任何一个洞里钻出来。Anton 想要选择一个位置,使得在最坏情况下,他跑到鼹鼠那里所需的时间**最短**。 花园可以表示为一个 $n \times m$ 的矩阵,其中 $n$ 是行数,$m$ 是列数。行从上到下编号为 $1$ 到 $n$。列从左到右编号为 $1$ 到 $m$。因此,索引为 $(1;1)$ 的单元格位于左上角。 花园的每个单元格 $a_{i, j}$ 描述了该单元格的状态: - $a_{i, j}$ = $\tt{.}$ —— 该单元格没有花或洞; - $a_{i, j}$ = $\tt{F}$ —— 该单元格有花; - $a_{i, j}$ = $\tt{H}$ —— 该单元格有洞。 Anton 还知道洞的数量不超过 $100$。 作为一个在这些花上投入了大量时间的人,你不忍心践踏它们。因此,你需要找到一条不经过它们的路径。 在任何时刻,Anton 可以从位置 $(x, y)$ 移动到以下任意一个位置:$(x-1,y)$、$(x+1,y)$、$(x,y-1)$、$(x,y+1)$,前提是新位置不包含花且在花园范围内。 请找出所有位置 ($x,y$),使得 Anton 在最坏情况下跑到鼹鼠那里所需的时间最短。

输入格式

- 第一行包含两个整数 $n$、$m$($1 \le n \cdot m \le 2 \cdot 10^5$)——花园的长度和宽度。 - 接下来的 $n$ 行,每行包含 $m$ 个字符——花园的描述。 保证从每个不包含花的单元格出发,可以通过不经过花的单元格到达任何其他不包含花的单元格。 保证至少有一个洞,且花园中洞的数量不超过 $100$。

输出格式

- 第一行输出一个整数 $x$($1 \leq x \leq n \cdot m$)——最优位置的数量。 - 接下来的 $x$ 行,每行输出一个等待鼹鼠的最优位置 ($x;y$)($1 \le x \le n$,$1 \le y \le m$)。 位置可以按任意顺序输出。

说明/提示

:::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/c812hr9c.png) ::: 设 $k$ 为花园中洞的数量。 - ($6$ 分):$n = 1, m = 2$; - ($9$ 分):$n = 1$; - ($15$ 分):$k = 1, n \cdot m \le 5 \cdot 10^3$; - ($22$ 分):$n \cdot m \le 5 \cdot 10^3$; - ($17$ 分):$k = 1$; - ($31$ 分):无额外限制。 翻译由 DeepSeek V3 完成