**
背景
**
用糖果來引誘小朋友學習是最常用的手法,綿羊爸爸就是用糖果來引誘萌萌學習博弈的。
**
描述
**
他把糖果分成了兩堆,一堆有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");
}
}
——既然選擇了遠方,便只顧風雨兼程