**
背景
**
用糖果来引诱小朋友学习是最常用的手法,绵羊爸爸就是用糖果来引诱萌萌学习博弈的。
**
描述
**
他把糖果分成了两堆,一堆有A粒,另一堆有B粒。他让萌萌和他一起按照下面的规则取糖果:每次可以任意拿走其中一堆糖果;如果这时候另一堆糖果数目多于1粒,就把它任意分成两堆,否则就把剩下的一粒糖果取走并获得这次博弈的胜利。胜利者将获得所有的糖果。萌萌想要得到所有的糖果,而绵羊爸爸想把糖果留下以便下一次利用。现在由萌萌先取糖果,旁观的小朋友们想知道萌萌是否有必胜策略。
格式
**
输入格式
**
本题有多组测试数据(不超过100组)。每组数据包括两行,第一行为A,第二行为B。1 ≤ A,B ≤ 2^127。输入数据以一个 -1 结束。
**
输出格式
**
每组数据对应一行输出。如果萌萌获胜则输出”MengMeng”,否则输出”SheepDaddy”(不包括引号)。
样例1
**
重点内容
**
**样例输入1
**
1
2
2
3
-1
**
样例输出1
**
MengMeng
SheepDaddy
**
Solution:
**
如果对五取模余2或3为必败态,否则为必胜态.
-Proof:
我们先证明 当有 起初态任意一个为 1 4 5 先手必胜
先手:x,1——取x——>胜
先手:x,4——取x——>后手:2,2(只能取2…)——>先手:1,1——>胜
先手:x,5——取x——>后手:2,3(剩下2的上面讨论了..于是取2剩下3)
——>先手:1,2——>胜
对于任意一个数 x ≡ 2 or 3 (mod 5) 我们将他拆成两个数 a b 那么我们可以断定 a 和 b其中一定有一个 mod 5 ≠ 2 or 3
然而对于任意一个 x ≡ 0 or 1 or 4 我们都可以拆成两个数 且都满足 mod 5余 2 or 3 然后这样就必胜态一直可以是自己保持着必胜态 然后数会一直减小 所以最后回到了我们最早的证明
end-
**
Code
**
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char s1[10003],s2[10003];
int main()
{
while(1)
{
scanf("%s",s1);
if(s1[0]=='-')return 0;
scanf("%s",s2);
int a=s1[strlen(s1)-1]-'0',b=s2[strlen(s2)-1]-'0';
a%=5;b%=5;
if((a==2||a==3)&&(b==2||b==3))
printf("SheepDaddy\n");
else
printf("MengMeng\n");
}
}
——既然选择了远方,便只顾风雨兼程