HDU1525 Euclid's Game(博弈)

来源:互联网 发布:美橙数据库删除 编辑:程序博客网 时间:2024/05/16 05:39

题目大意:

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

将小的数变为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");elseprintf("Ollie wins\n");}return 0;}


0 0
原创粉丝点击