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必胜。

时间: 2024-10-11 00:18:30

vijos1196|吃糖果游戏|博弈论的相关文章

HDU 1205 吃糖果(鸽笼原理)

吃糖果 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 31313    Accepted Submission(s): 8894 Problem Description HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另一种,这样:可

HDU 1205.吃糖果【鸽巢原理】【8月1】

吃糖果 Problem Description HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另一种,这样:可是Gardon不知道是否存在一种吃糖果的顺序使得他能把所有糖果都吃完?请你写个程序帮忙计算一下. Input 第一行有一个整数T,接下来T组数据,每组数据占2行,第一行是一个整数N(0<N<=1000000),第二行是N个数,表示N种糖果的数目Mi(0<Mi<=10000

HDOJ 1205 吃糖果

吃糖果 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 23456    Accepted Submission(s): 6747 Problem Description HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另一种,这样:可

杭电 HDU 1205 吃糖果

吃糖果 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 27178    Accepted Submission(s): 7691 Problem Description HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另一种,这样:可

吃糖果hdu2502

HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另一种,这样:可是Gardon不知道是否存在一种吃糖果的顺序使得他能把所有糖果都吃完?请你写个程序帮忙计算一下. Input第一行有一个整数T,接下来T组数据,每组数据占2行,第一行是一个整数N(0<N<=1000000),第二行是N个数,表示N种糖果的数目Mi(0<Mi<=1000000). Output对于每组数据,输出一行,包含

HD1205吃糖果(鸽巢、抽屉原理)

吃糖果 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 30589    Accepted Submission(s): 8661 Problem Description HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另一种,这样:可是

洛谷P1199 三国游戏 博弈论 数学

洛谷P1199 三国游戏博弈论 数学 这道题 其实 人是必胜的 能取到的最大值 为 每行第二大值中的最大值 为什么呢 假使第一次我们取到了我们心中的那个答案的所在行 那么接着电脑会取 这一行最大值的对应行 那么我们来分析一下电脑取的那个数在他取的那行的特点 首先我们假设其不是最大值,因为矩阵中任意两个数不相同 所以也就是说还有个数比他大,然后就是说电脑取的第二大或者第n大值就已经比我们取的第一大值要大了,说明我们取的行并不是每行第二大值中的最大值所在的行2.也就是说这个数必定为该行中的最大值 那

1304吃糖果

题意:有N种糖果,每种有Mi(0<Mi<=1000000)个,是否存在一种吃糖果顺序使得相邻糖果不相同(先吃这一种,再吃下一种). 分析:插空,如果最多的一种糖果,能被剩下所有的糖果插空,则存在,即ans - 1 <= sum - ans. 1 #include<iostream> 2 #include<cstdio> 3 #include<string> 4 #include<cstring> 5 #include<set>

1944:吃糖果(斐波那契数列)

1944:吃糖果 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名(盒内共有 N 块巧克力,20 > N >0).妈妈告诉名名每天可以吃一块或者两块巧克力.假设名名每天都吃巧克力,问名名共有多少种不同的吃完巧克力的方案.例如:如果N=1,则名名第1天就吃掉它,共有1种方案:如果N=2,则名名可以第1天吃1块,第2天吃1块,也可以第1天吃2块,共有2种方案:如果N=3,则名名第1天可以吃1块,剩2