题意:
明明和亮亮在玩一个游戏。
桌面上一行有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*
当任何一枚棋子到达最右边的格子时,这枚棋子自动消失。当一方不能移动时,这方输。假设明明和亮亮都采取最优策略,明明先走,谁将取胜?