您的位置:首页 > 其它

HDU1525 Euclid's Game(博弈)

2015-05-13 18:27 302 查看
题目大意:

给出两个数,每次用大的数减去小的数的正整数倍

将小的数变为0者获胜

设两个数为a,b(a>=b)

则必胜态为a%b==0

当b<a<2*b时,下一个状态只能是b,a-b

一直反复下去则有一人先到必胜态

当a>=2*b时,先手可以让下一个状态到达b,a%b或者a%b+b,b

这两个状态之中一定有一个是必胜态一个是必败态

由于先手很聪明,所以先手一定可以走到必胜态

#include <stdio.h>

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