您的位置:首页 > 其它

POJ 2348 博弈

2013-01-07 12:24 211 查看
这个题看了一上午,一直没头绪,撞了东南西北墙,终于在中午看了解题报告。恍然大悟!

这个题的意思是这样的,只能从较大数中取较小数的倍数。到最后谁不能拿了,就视为失败。

我开始想找到一个数字的规律来解题,后来发现不行,接着又想尝试递归来模拟拿的步骤来写,又被自己否定了,终于看了解题报告。恍然大雾,明白了决策与影响控制对手的节奏。如果a/b>=2,则有两种选择来控制对手的行动,1种是将状态变为{a>b&&a/b=1}另一种是{a<b}。这样对手在两种情况下均只能有一种选择,而结果也只有两种,所以具有选择权的就会控制比赛结果。 也许大家在担心,是不是这下控制住了,下次就变了呢?大家不用担心这个,因为你给对手的选择永远只有一个,如果还有别的选择依然由自己来控制! 还有要找出来谁会优先掌握控制权。这题,对我有很大启发。感觉到了博弈的精髓,不给对手留机会。。。

#include <stdio.h>
int main()
{
int a,b,t,count;
while(scanf("%d%d",&a,&b)&&(a!=0||b!=0))
{
if(a<b)
{
t=a;a=b;b=t;
}
if(b==0)
{
printf("Ollie wins\n");
continue;
}
else if(a%b==0)
{
printf("Stan wins\n");
continue;
}
count=0;
while(b!=0&&a/b==1)
{
count++;
a=a-b;
t=a;a=b;b=t;
}
if(count%2==0)
{
printf("Stan wins\n");
}
else if(count%2==1)
{
printf("Ollie wins\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: