#429. 流水覆盖

流水覆盖

题目描述

Filip 有一行单元格,一些是障碍物,另一些是空的。他希望把所有空的单元格都灌上水,为此可以进行如下两种操作:

  • 1 1 — 在一个空的单元格中灌上水。
  • 2 2 — 把一个有水单元格中的水移除并改放置到另一个空的单元格中。

如果在某时刻单元格 i i ( 2in1 2 \le i \le n-1 ) 是空的,但 i1 i-1 i+1 i+1 都有水, 则它会被立刻灌上水。

找出把所有空的单元格都灌上水所需要的最少的操作1次数。

注意你不用最小化操作2次数;障碍物格子无法灌水。

输入格式

第一行 n n ( 1n100 1 \le n \le 100 ) ,为单元格个数。第二行一个n n 长度字符串 s s ,其中第i i 个字符为'.' 表示格子 i i 是空的, '#' 表示格子 i i 是障碍物。

输出格式

对每组数据,在一行中输出最小的操作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”即可完成。