#P6050. [RC-02] 游戏
[RC-02] 游戏
题目描述
Shik 大佬发明了一种游戏。这种游戏在 ( 为偶数)的网格上进行,如图所示(左上角为 ,右下角为 ):
这种游戏的规则如下:
- 初始局面为:在最左边一列和最右边一列的网格上分别放置着红方和蓝方的棋子,在最上面一行左半部分和最下面一行左半部分也放置着红方的棋子,在最上面一行右半部分和最下面一行右半部分也放置着蓝方的棋子;
- 红方先走,蓝方后走;
- 有一方只剩下 颗棋子时,游戏结束,另一方获胜;
- 有一方无棋可走时,游戏结束,另一方获胜;
- 每次走棋可以让一颗棋子往上下左右方向移动 格,但目标格上不能有棋子;
- 同时满足以下条件时可以吃掉对方棋子:在一行(或一列上),有且仅有 颗棋子(当 时为 颗也可),其中有 颗己方棋子(当 时为 颗也可),另外 (当 时为 颗也可)颗棋子为敌方的,我方的棋子全部相邻,敌方棋子全部相邻,并且我方有一颗棋子与敌方相邻,而且此局面为我方主动走成,则我方可以把这一列上敌方的棋子全部吃掉。
现在,请你模拟走棋的过程。
以上为一个不可以吃子的局面。(红吃蓝)
但假如蓝棋本来就在 ,红棋从 走到 ,就可以吃子。
若不能理解,强烈建议手推一遍样例。
输入格式
输入文件的第一行有两个整数 和 ,表示棋盘的大小和走棋的总步数。
接下来 行,每行四个整数 ,表示某一方的原本在 的棋子走到了 。从第二行开始算起,第偶数行表示蓝方,第奇数行表示红方。
输出格式
分三种情况输出答案:
- 数据不合法:输出 。
- 这一局还没有结束:第一行输出 ,接下来 行,每行 个字符,表示目前的局面状态。用
h
表示红方棋子,l
表示蓝方棋子,.
表示此网格为空。若此局面某一方可以吃子,输出吃子后的状态。 - 这一局已经结束:第一行输出 ,第二行输出
red
或blue
,表示哪一方获胜。第三行至第 行,输出获胜时的局面。用h
表示红方棋子,l
表示蓝方棋子,.
表示此网格为空。若此局面某一方可以吃子,输出吃子后的状态。你的程序应该忽略使你判断出胜负那一行之后的所有输入。
4 1
1 4 1 3
0
4 2
1 3 2 3
3 4 3 3
1
hhll
h..l
..ll
hh.l
6 7
1 3 2 3
4 1 4 2
3 1 4 1
6 4 5 4
2 1 3 1
5 4 6 4
1 1 2 1
1
.hhh..
h..l.l
.h...l
h....l
h....l
hhhlll
6 22
1 3 2 3
4 1 4 2
3 1 4 1
6 4 5 4
2 1 3 1
5 4 6 4
1 1 2 1
6 2 5 2
3 1 3 2
6 4 5 4
2 1 2 2
4 6 4 5
3 6 4 6
5 4 6 4
2 6 3 6
6 4 5 4
1 6 2 6
6 5 6 6
2 6 2 5
6 6 5 6
2 5 2 6
6 6 5 6
2
red
...h..
hhh...
.h...l
h...l.
h..l..
.hhh..
提示
样例 4 说明:第 21 歩时,红方已胜,因此第 22 歩的非法移动应该忽略。
对于 的数据,不存在吃子的情况;
对于 的数据,;
对于 的数据,;
对于 的数据,,。