• 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*

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

  • 相关阅读:
    CentOS7 Failed to start LSB: Bring up/down解决方法
    【转】Java包管理器Maven学习
    Android开发-API指南-<category>
    Android开发-API指南-<application>
    Android开发-API指南-<activity-alias>
    Android开发-API指南-<activity>
    Android开发-API指南-<action>
    Android开发-API指南-Android简介
    Android开发-API指南-Activity
    Android开发-API指南-应用程序开发基础
  • 原文地址:https://www.cnblogs.com/Leohh/p/7674066.html
Copyright © 2020-2023  润新知