#CF1900A. 覆盖水域
覆盖水域
A. 覆盖水域
每个测试点时间限制: 秒
内存限制: 兆字节
菲利普有一排单元格,其中一些被阻塞,一些是空的。他希望所有空单元格中都充满水。他有两种操作:
- 1、在空单元格中放置水。
- 2、从一个单元格中取出水,并将其放入任意其他空单元格。
如果在某一时刻,单元格 ()是空的,并且它的两侧单元格 和 中都含有水,那么该单元格会自动充满水。
为了将所有空单元格都填满水,求他需要执行操作 的最小次数。
注意:你不需要最小化操作 的使用次数。注意:阻塞的单元格既不能含水,菲利普也不能在其中放置水。
输入
每个测试点包含多个测试用例。第一行包含一个整数 ()——测试用例的数量。接下来是每个测试用例的描述。
每个测试用例的第一行包含一个整数 ()——单元格的数量。
下一行包含一个长度为 的字符串 。如果第 个字符是 '.',则表示单元格 是空的;如果是 '#',则表示单元格 被阻塞。
输出
对于每个测试用例,输出一个整数——填满所有空单元格所需的最小操作 次数。
示例
输入
5
3
...
7
##....#
7
..#.#..
4
####
10
#...#..#.#
输出
2
2
5
0
2
注释
测试用例
在第一个测试用例中,菲利普可以在单元格 和 中放置水。由于单元格 位于两个含水的单元格之间,它也会自动充满水。
测试用例
在第二个测试用例中,他可以在单元格 和 中放置水。这样单元格 会自动充满水。然后他从单元格 中取出水,放入单元格 。由于单元格 的邻居(单元格 和 )都有水,单元格 也会自动充满水。下图展示了这个过程。
第二个测试用例的操作示意图。白色单元格是空的,灰色的是阻塞的,蓝色的是有水。
测试用例
在第三个测试用例中,他可以在所有空单元格中放置水。这需要 次操作 。
测试用例
在第四个测试用例中,没有空单元格。因此他不需要放置任何水。
测试用例
在第五个测试用例中,存在一种操作序列,只需要 次操作 。