#P1138. Ships
Ships
本题没有可用的提交语言。
题目描述
大概每个上过学的人都知道这样一个游戏:两个对立的玩家在一张纸上放置一组船只,然后通过猜测对方船只的位置来尝试消灭它们。
在我们这个版本的游戏中,你的对手在一个矩形方格网格上分布了以下七种船只图案:
</p>xx xx xx x x x
xx xx xx xxx xxx xxx xxxx
每个船只图案恰好覆盖四个方格。这些图案可以旋转,但不能镜像翻转。所有图案都确保完全放置在矩形的边界内,并且彼此不重叠,不过允许与其他图案或边界接触。
我们假设游戏正进行到中间阶段,已经有一些方格被揭开了。你会得到一个矩形方格网格,代表你目前对敌人船只位置的了解。每个方格用以下字符之一标记:
'x'
:表示该方格被船只覆盖;'o'
:表示该方格没有被船只覆盖;'.'
:表示该方格尚未被揭开。根据这些信息,你需要判断是否能够在最多猜错一次的情况下确定所有剩余的
'x'
方格,也就是说,在揭开所有'x'
方格之前,你是否能够在揭开'.'
方格时,遇到的'o'
方格不超过一个。这意味着如果在猜错一次(遇到一个'o'
方格)后,解决方案变得唯一,那么这种情况是被允许的。输入格式
输入文件包含多个游戏局面。每个测试用例以一行开头,该行包含两个整数
h
和w
,分别定义了游戏矩形的高度和宽度,其中 2 <=w
,h
<= 16。接下来的
h
行,每行包含一个由w
个字符组成的字符串。这些字符中的每一个都是'x'
、'o'
或'.'
,具体取决于相应方格的状态。每个游戏局面之间用一个空行分隔。输入文件以
w
= 0 且h
= 0 的游戏局面结束,这个局面不需要处理。输出格式
对于每个测试用例,你应该首先输出一行,包含游戏的编号,然后是一行,包含
yes.
(如果你能够在最多猜错一次的情况下确定所有'x'
方格)或no.
(如果你至少需要猜错两次才能确定所有'x'
方格)。在每个游戏局面的输出之后输出一个空行。
10 10 .x..x..... oooooxoooo oxooxxx... xxoooooo.. xoooxooo.. ooxxxxoo.. oooooxxoox ooooooxoox ooooooooxx oooooooooo 0 0
Game #1 yes.
来源
1996年西南欧洲区域竞赛