题目名称 | 1653. [BOI2008]移棋子游戏 |
---|---|
输入输出 | gam.in/out |
难度等级 | ★★☆ |
时间限制 | 1000 ms (1 s) |
内存限制 | 256 MiB |
测试数据 | 48 |
题目来源 | cstdio 于2014-06-01加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:0, 提交:1, 通过率:0% | ||||
Anson | 72 | 0.723 s | 2.33 MiB | C++ |
关于 移棋子游戏 的近10条评论(全部评论) | ||||
---|---|---|---|---|
卧槽为什么所有的组合游戏题都叫game!!!!!!!你们就不能起点有新意的名字么!!!!!
cstdio
2014-06-01 19:48
1楼
|
两名玩家,A和B,在一张n*n的方格棋盘上玩游戏。棋盘上的每一格是黑色或者白色。游戏只在白格子上进行——黑色格子被排除在外。两位玩家都有一枚棋子,最初放在该玩家的起点——棋盘上的一个白色格子。两名玩家的起点互不相同。
双方轮流移动。每次移动中,玩家将他的棋子移向一个相邻的白色格子(可以是上下左右)。如果这名玩家把他的棋子移到了对手的棋子所在格,他就可以获得一次额外的移动(从而跳过对手的棋子)。在这种情况下第二次移动的方向可以和第一次不同。
玩家A先移动,然后两名玩家轮流移动。游戏的目标是到达对手的起点。先到达对手起点的玩家获胜,即使这名玩家的最后一次移动跳过了对手的起点。我们希望确定哪名玩家有必胜策略(一名玩家有必胜策略是指无论对手如何移动他都能获胜)。
图1.如果A在头三次移动中向右走,B将在头三次移动中向上走。因此,在第三次移动中B将到达A所在的位置并因此获得一次额外的移动机会。因此B将先到达A的起点并赢得游戏。
图2.A可以先向右走一步再向下走一步。然后,根据B的头两步移动,A将会向下或者向右走并避开B。因此A将会首先到达B的起点,从而赢得游戏。事实上我们证明了 A有必胜策略。
写一个程序:
·读入棋盘的布局和两名玩家的起点。
·找到有必胜策略的玩家。
·输出结果。
输入文件的第一行有一个整数t,代表数据组数。(1<=t<=10).
之后描述了t组测试数据。每组测试数据格式如下。
第一行有一个整数n(2<=n<=300),代表棋盘的长度。
接下来的n行描述了棋盘。每行有n个字符(中间没有空格)。每个字符是'.'(白格),'#'(黑格),'A'(A的起点)或者'B'(B的起点)。
输入保证A,B的起点间存在由白格组成的通路。
另外,对于60%的数据,n<=150,对于40%的数据,n<=40。
对每组数据输出一行一个字符'A'或者'B',代表有必胜策略的玩家。
2 4 A... .#.. .... ...B 4 A... .... ..#. ...B
B A
BOI2008 Game