TYOI 1015 Game:博弈 结论【步数之和的奇偶性】

题意:

  明明和亮亮在玩一个游戏。

  桌面上一行有n个格子,一些格子中放着棋子。

  明明和亮亮轮流选择如下方式中的一种移动棋子(图示中o表示棋子,*表示空着的格子):

  (1)当一枚棋子的右边是空格子的话,可以将这枚棋子像右移动一格。

    **o***         ->           ***o**

  (2)当一枚棋子的右边连续两个都有棋子,并且这个棋子往右边数第3格没有棋子,那么可以将这个棋子可以跳过去那两个棋子

    **ooo*        ->           ***oo*

  当任何一枚棋子到达最右边的格子时,这枚棋子自动消失。

  当一方不能移动时,这方输。

  假设明明和亮亮都采取最优策略,明明先走,谁将取胜?

 

题解:

  走一步和走三步都是走奇数步。

  所以统计一下每个棋子到终点的步数之和tot。如果tot为奇数,则先手胜,否则后手胜。

 

AC Code:

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 
 5 using namespace std;
 6 
 7 int n,t;
 8 int tot;
 9 
10 int main()
11 {
12     cin>>t;
13     while(t--)
14     {
15         cin>>n;
16         tot=0;
17         char c;
18         for(int i=n-1;i>=0;i--)
19         {
20             cin>>c;
21             if(c=='o') tot+=i;
22         }
23         if(tot&1) cout<<"M"<<endl;
24         else cout<<"L"<<endl;
25     }
26 }

 

Game

【题目描述】

明明和亮亮在玩一个游戏。桌面上一行有n个格子,一些格子中放着棋子。明明和亮亮轮流选择如下方式中的一种移动棋子(图示中o表示棋子,*表示空着的格子):

1)当一枚棋子的右边是空格子的话,可以将这枚棋子像右移动一格。

**o***         ->           ***o**

2)当一枚棋子的右边连续两个都有棋子,并且这个棋子往右边数第3格没有棋子,那么可以将这个棋子可以跳过去那两个棋子

**ooo*        ->           ***oo*

当任何一枚棋子到达最右边的格子时,这枚棋子自动消失。当一方不能移动时,这方输。假设明明和亮亮都采取最优策略,明明先走,谁将取胜?

posted @ 2017-10-15 20:37  Leohh  阅读(519)  评论(0编辑  收藏  举报