#429. 流水覆盖
流水覆盖
题目描述
Filip 有一行单元格,一些是障碍物,另一些是空的。他希望把所有空的单元格都灌上水,为此可以进行如下两种操作:
- — 在一个空的单元格中灌上水。
- — 把一个有水单元格中的水移除并改放置到另一个空的单元格中。
如果在某时刻单元格 ( ) 是空的,但 和 都有水, 则它会被立刻灌上水。
找出把所有空的单元格都灌上水所需要的最少的操作1次数。
注意你不用最小化操作2次数;障碍物格子无法灌水。
输入格式
第一行 ( ) ,为单元格个数。第二行一个长度字符串 ,其中第 个字符为'.' 表示格子 是空的, '#' 表示格子 是障碍物。
输出格式
对每组数据,在一行中输出最小的操作1次数。
输入输出样例
3
...
7
##....#
7
..#.#..
4
####
10
#...#..#.#
2
2
5
0
2
样例解释
- 第一个样例:Filip 可以在第 1 和第 3 个单元格灌水。由于第 2 个单元格处于两个有水的格子之间,它也会被自动填满。
- 第二个样例:他可以在第 3 和第 5 个单元格灌水,这会导致第 4 个单元格自动填满。接着,他将第 5 个单元格的水移动到第 6 个单元格。此时,第 5 个单元格的邻居(第 4 和第 6 个)都有水,因此第 5 个格子再次被自动填满。
- 第三个样例:他必须在所有空单元格中手动灌水。这需要 5 次“操作 1”。
- 第四个样例:没有空单元格,因此不需要进行任何灌水操作。
- 第五个样例:存在一种操作序列,仅需 2 次“操作 1”即可完成。