#330. 问题4:奶牛选美(pageant)
问题4:奶牛选美(pageant)
题目描述
听说最近的流行趋势是皮肤上有两个斑点的奶牛, Farmer John 买了一整群两个斑点的牛。不幸的是,流行趋势是变化得很快的,目前最流行的趋势是只有一个斑点的奶牛!
FJ 想对他的每只牛都进行一些涂改,使得两个斑点被合并成一个,从而让他的牛群变得更加时尚。一只奶牛的皮肤可以看成是一张 行 列( )的字符网格,如下所示:
................
..XXXX....XXX...
...XXXX....XX...
.XXXX......XXX..
........XXXXX...
.........XXX....
其中每个 X
表示斑点的一部分,如果两个 X
在横向或者纵向是相邻的,则它们属于同一个斑点(斜对角相邻不算),所以上述图形有刚好两个斑点。 FJ 牛群中的每只牛都有刚好两个斑点。
FJ 想要用尽可能少的颜料将两个斑点合并成一个。在上例中,他只需要用额外三个字符 X
就可以实现(下图中新字符用 *
标识出来,这样更直观)。
................
..XXXX....XXX...
...XXXX*...XX...
.XXXX..**..XXX..
........XXXXX...
.........XXX....
请帮助 FJ 计算出为了将两个斑点合并成一个更大的斑点,最少需要使用多少 X
。
输入格式(文件名:pageant.in)
第 行:两个用空格隔开的整数 和 。
第 行:每行包含一个由 X
和 .
组成的长为 的字符串,表示奶牛的皮肤图案的一行。
输出格式(文件名:pageant.out)
第 行:为了将两个斑点和并成一个需要使用的新 X
的最少数量。
输入样例
6 16
................
..XXXX....XXX...
...XXXX....XX...
.XXXX......XXX..
........XXXXX...
.........XXX....
输出样例
3
样例解释
输入中的图案展示了奶牛皮肤上的两个独立的斑点,在下图中用 1
和 2
标识出来:
................
..1111....222...
...1111....22...
.1111......222..
........22222...
.........222....
三个 X
足以将两个斑点合并成一个:
................
..1111....222...
...1111X...22...
.1111..XX..222..
........22222...
.........222....