求助!C语言博弈问题

来源:百度知道 编辑:UC知道 时间:2024/06/07 13:20:08
分花生游戏 (博弈论)

Time Limit:1000MS Memory Limit:65536K
Total Submit:46 Accepted:12

Description

4月6日,我校Nicholas代表队做火车前往湖北武汉大学参加“百度杯”第二届华中北区ACM程序设计邀请赛,在火车上老师和队员们觉得要找点事情来做,于是小谭(谭老师)就抓了一大包花生出来,让大家玩一个分花生的游戏,游戏规则如下:
桌子上放着两堆花生,Player1和Player2轮流对这些花生进行操作。在每一次操作中,操作者需要吃掉其中一堆花生,并且把另一堆花生分成两堆(可以不相等)留给对方操作。游戏如此进行下去,花生数会越来越少,最后必将出现这样一种情况:某人吃掉一堆花生后发现另一堆里只剩一颗花生不能再分了。游戏规定此时该操作者吃掉最后这一颗花生从而取胜。
起初Nicholas的队员轮流挑战小谭,可是全部都很遗憾的落败了,旁边的杨老师实在看不下去了便提醒队员们这个游戏是不公平的,对于任意一种初始状态,总有一方有必胜策略。所谓有必胜策略是指,无论对方如何操作,自己总有办法取胜。
现在将进行10次游戏,每一次游戏中总是小谭先进行操作。现在你的任务就是帮助Nicholas的队员们设计一个程序来判断每一次游戏中Nicholas的队员是否有必胜策略。(假设小谭和队员们都是用最优的方式在进行操作)。

Input

输入数据一共10行,每行有两个用空格隔开的正整数m,n( 0 < m,n < 100000 ),表示一次游戏开始时桌子上两堆糖果分别有多少个。

Output

输出十行字符串。这些字符串只能是“Yes”或“No”,它们表示对应的十行输入数据Nicholas的队员是否有必胜策略。请注意大小写。

Sample Input

1 1
1 2
1 3
1 4
1 5
2 1
2 2
2 3
2 4
2 5

如果轮到自己时:
含有1则必胜

2或3则必败
4必胜
5=2+3 必胜
6=3+3 必胜
7=1+6|2+5|3+4 必败
8=1+7|2+6|3+5|4+4 必败
9=2+7 必胜
------------------------------------------
总结一下现在的规律
如果一个数字能由必败数字组合而成,则该数字必胜
4 = 2+2
5 = 2+3
6 = 3+3
这个容易判断

其它数字应该都是必败数字(根据规律猜的)

所以只要找出必胜数字,然后判断初始条件中有没有必胜数字
如果有,就输了
如果没有就赢了(前提是证明数字只分必败和必胜两种)
---------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include <windows.h>
int main()
{
int max=0, winnum[10001], input[10][2], i, j;

memset(winnum, -1, 10001);

for(i = 0; i < 10; i++)
{
scanf("%d %d", &input[i][0], &input[i][1]);
if(input[i][0] > max)
max = input[i][0];
if(input[i][1] > max)
max = input[i][1];
}
//输入10组数字,找出里面最大的数
winnum[1] = 0;
winnum[2] = 1;
winnum[3] = 1;
winnum[4]