SRM534-div1-1-div2-2-EllysCheckers


题目大意:
     两个人玩一个游戏,一个只有一列包含N个格子的棋盘,编号从左到右分别是0, 1, 2,..., N-1。初始时有些格子上有棋子,有些没有。两人轮流下棋,每步移动一个棋子。棋子的移动规则为:
  • a. 如果棋子右边格子是空的,该棋子可以向右移动一格;
  • b. 如果棋子右边有连续的两个棋子,且右边第三个为空格,则可以跳到该空格。
     如果棋子到了棋盘的最右边,那么该棋子就会马上消失。最后没有棋子可以移动的一方输。如果两个人都用最优的策略下棋,给定棋盘上棋子的初始状态,问先手能否胜出。

思路:
     这个题目相对还是比较水的,发现规律了就很容易做了。首先,根据棋子移动的规则,可以确定游戏到最后输了的那个人是因为棋盘上没有棋子了,因为只要棋盘上有棋子那么肯定是可以移动的。假设初始状态各个棋子到最右边格子的距离综合为S。根据规则,每一步棋子的移动要嘛右进1格,要嘛右进3格。所以每一步S要嘛变为S-1要嘛变为S-3,所以S的奇偶性必然发生了变化。也就是说双方各下一步之后S的奇偶性是不变的。结合游戏最终状态是S=0可知如果初始状态是S是偶数则先手必输,否则必赢。

Java代码:
public class EllysCheckers
{
     public String getWinner(String board)
     {
          int x = 0;
          for(int i = 0; i < board.length(); ++i){
               if(board.charAt(i) == 'o'){
                    x += board.length() - 1 - i;
               }
          }
          return x % 2 == 1 ? "YES" : "NO";
     }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值