• vijos1196|吃糖果游戏|博弈论


    描述
    Matrix67和Shadow正在做一个小游戏。
    桌子上放着两堆糖果,Matrix67和Shadow轮流对这些糖果进行操作。在每一次操作中,操作者需要吃掉其中一堆糖果,并且把另一堆糖果分成两堆(可以不相等)留给对方操作。游戏如此进行下去,糖果数会越来越少,最后必将出现这样一种情况:某人吃掉一堆糖果后发现另一堆里只剩一块糖果不能再分了。游戏规定此时该操作者吃掉最后这一块糖果从而取胜。
    这个游戏是不公平的。对于任意一种初始状态,总有一方有必胜策略。所谓有必胜策略是指,无论对方如何操作,自己总有办法取胜。
    Matrix67和Shadow将进行10次游戏,每一次游戏中总是Matrix67先进行操作。Matrix67想知道每一次游戏中谁有必胜策略。
    格式
    输入格式
    输入数据一共10行,每行有两个用空格隔开的正整数,表示一次游戏开始时桌子上两堆糖果分别有多少个。
    对于50%的数据,这些正整数均不超过100;
    对于70%的数据,这些正整数均不超过10 000;
    对于100%的数据,这些正整数均不超过10 000位。
    输出格式
    输出十行字符串。这些字符串只能是“Matrix67”或“Shadow”,它们表示对应的十行输入数据中有必胜策略的一方。
    请注意大小写。
    样例1
    样例输入1
    1 1
    1 2
    1 3
    1 4
    1 5
    2 1
    2 2
    2 3
    2 4
    2 5
    样例输出1
    Matrix67
    Matrix67
    Matrix67
    Matrix67
    Matrix67
    Matrix67
    Shadow
    Shadow
    Matrix67
    Matrix67
    限制
    各个测试点1s
    来源
    Matrix67原创

    分析:这题其实不难。与萌萌的糖果那道题类似。我还是从头分析一下,给像我一样的蒟蒻引路。

    我们假设两堆a,b,先吃a。

    如果是a,1,显然67胜。如果是a,2,显然67挂了。如果是a,3,3=1+2,67还是挂。如果是a,4,4=2+2。67胜了。

    如果是a,5或6,5=2+3,6=3+3,67胜。如果a,7,若7=2+5,s可以吃掉2然后分成2+3,67挂;若7=1+6,s可以拿走1然后分成3+3;

    若7=2+5,s可以吃掉2然后分成2+3。所以a,7的话67必挂。如果是a,8,同7的情况67挂了。如果是a,9,恭喜9=2+7,s必挂无疑。

    如果是a,10。10=2+8,于是你又赢了。

    我们可以定义集合a={2,3,7,8},b={1,4,5,6,9,10}。

    考虑两堆都大于10的情况。

    (1)10*i+a,10*i+a。则67必输。

    (2)10*i+a,10*i+b,你可以吃掉10*i+a,然后把10*i+b分成两堆10*i+a,67必胜。

    (2)10*i+b,10*i+b,67必胜。

  • 相关阅读:
    javascript教程系列-10.DOM(下)
    javascript教程系列-9.DOM(上)
    javascript教程系列-8.BOM
    javascript教程系列-7.Date对象
    javascript教程系列-6.String类型
    javascript教程系列-5.数组
    Python字符串、元组、列表、字典互相转换的方法
    python 中函数
    python中的字符串 列表 字典
    python 基础 知识
  • 原文地址:https://www.cnblogs.com/Shymuel/p/4648970.html
Copyright © 2020-2023  润新知