#AT2559. C - Cross

C - Cross

当前没有测试数据。

C - 十字架

得分:$300$ 分

题目描述

给定一个 $H$ 行 $W$ 列的网格,我们用 $(i, j)$ 表示网格中从上到下第 $i$ 行,从左到右第 $j$ 列的单元格。
网格中的每个单元格上都写有字符 # 或者 .。我们用 $C[i][j]$ 表示 $(i, j)$ 上的字符。对于不满足 $1 \leq i \leq H$ 或 $1 \leq j \leq W$ 的整数 $i$ 和 $j$,我们定义 $C[i][j]$ 为 .

如果满足以下所有条件,则称 $(a, b)$ 和 $(a+d,b+d),(a+d,b-d),(a-d,b+d),(a-d,b-d)$ $(1 \leq d \leq n, 1 \leq n)$ 组成的 $(4n+1)$ 个单元格为 中心为 $(a,b)$,大小为 $n$ 的十字架

  • $C[a][b]$ 为 #
  • 对于所有满足 $1 \leq d \leq n$ 的整数 $d$,$C[a+d][b+d],C[a+d][b-d],C[a-d][b+d]$ 和 $C[a-d][b-d]$ 都为 #
  • $C[a+n+1][b+n+1],C[a+n+1][b-n-1],C[a-n-1][b+n+1]$ 和 $C[a-n-1][b-n-1]$ 中至少有一个为 .

例如,下图中的网格在 $(2, 2)$ 处有一块大小为 $1$ 的十字架,在 $(3, 7)$ 处有一块大小为 $2$ 的十字架。

image

网格上除了构成十字架的单元格之外,其他地方都没有字符 #
另外,两个不同的十字架中的两个单元格不共享一个角。下图中的两个网格是共享角的不同十字架组成的例子;不会作为输入给出。 例如,左边的网格是无效的,因为 $(3, 3)$ 和 $(4, 4)$ 共享了一个角。

image2

设 $N = \min(H, W)$,并且 $S_n$ 表示大小为 $n$ 的十字架的数量。求 $S_1, S_2, \dots, S_N$。

约束

  • $3 \leq H, W \leq 100$
  • $C[i][j]$ 为 #.
  • 两个不同的十字架中的两个单元格不共享一个角。
  • $H$ 和 $W$ 为整数。

输入

从标准输入中以以下形式给出:

HH WW

C[1][1]C[1][2]C[1][W]C[1][1]C[1][2]\dots C[1][W]

C[2][1]C[2][2]C[2][W]C[2][1]C[2][2]\dots C[2][W]

\vdots

C[H][1]C[H][2]C[H][W]C[H][1]C[H][2]\dots C[H][W]

输出

以空格分隔打印 $S_1, S_2, \dots$ 和 $S_N$。


5 9
#.#.#...#
.#...#.#.
#.#...#..
.....#.#.
....#...#
1 1 0 0 0

根据题目描述,网格中有一块大小为 $1$ 的十字架在 $(2, 2)$ 处,还有一块大小为 $2$ 的十字架在 $(3, 7)$ 处。


3 3
...
...
...
0 0 0

可能没有十字架。


3 16
#.#.....#.#..#.#
.#.......#....#.
#.#.....#.#..#.#
3 0 0

15 20
#.#..#.............#
.#....#....#.#....#.
#.#....#....#....#..
........#..#.#..#...
#.....#..#.....#....
.#...#....#...#..#.#
..#.#......#.#....#.
...#........#....#.#
..#.#......#.#......
.#...#....#...#.....
#.....#..#.....#....
........#.......#...
#.#....#....#.#..#..
.#....#......#....#.
#.#..#......#.#....#
5 0 1 0 0 0 1 0 0 0 0 0 0 0 0