学校美术社要把一幅像素画制作成展板。画布由 H 行 W 列的正方形格子组成,从上到下编号为 1 到 H,从左到右编号为 1 到 W。
字符 # 表示对应格子已经着色,字符 . 表示对应格子没有着色。美术社准备沿着所有着色区域的边界贴上窄纸条:
如果两个着色格只在一个顶点处接触,它们的边界在该点视为互不连接,纸条不能穿过这个接触点继续延伸。
例如,一个单独的着色格需要 4 张纸条;一个实心矩形无论大小都只需要 4 张纸条。
请你求出完成整幅像素画的描边最少需要多少张纸条。
第一行输入两个整数 H,W,表示画布的行数和列数。
接下来 H 行,每行输入一个长度为 W 的字符串,仅包含字符 # 和 .,表示像素画。
输出一行一个整数,表示所需纸条的最少数量。
4 5 ##... .#... .###. .....
8
6 7 #..##.. .#.##.. ..#.... ..###.. #...... ......#
26
10 12 ###....#.... .##...###... ..#....#.... ..####...... .....#..##.. .##..#..##.. .##..####... ......#..... ..#####..#.. ............
44
从最上方的水平边开始沿着着色区域外侧描边,每遇到一次转弯就换一张纸条。绕完整个边界会经过 8 个转弯,因此共需 8 张纸条。
注意,相邻着色格之间的公共边位于着色区域内部,不需要贴纸条。
本组图案包含多个互不相连的部分,也包含只在顶点处接触的着色格。只在顶点处接触的两段边界不能合并。
对于所有测试数据,保证:
# 和 .;本题共 10 个测试点,每个测试点 10 分。
| 测试点编号 | H\le | W\le | 特殊性质 |
|---|---|---|---|
| 1 | 3 | 3 | 无 |
| 2 | 10 | 10 | 无 |
| 3 | 100 | 100 | A |
| 4 | 1000 | 1000 | A |
| 5 | 100 | 100 | B |
| 6 | 1000 | 1000 | B |
| 7 | 100 | 100 | 无 |
| 8\sim10 | 1000 | 1000 | 无 |
特殊性质 A:任意两个着色格都没有公共边。
特殊性质 B:所有着色格恰好组成一个边平行于画布边缘的实心矩形。