HDU 1525 Euclid's Game (博弈)

2015-01-24 06:28:40 · 作者: · 浏览: 3
两个数a和b,总会出现的一个局面是b,a%b,这是必然的,如果a>=b&&a<2*b,那么只有一种情况,直接到b,a%b。否则有多种情况。
对于对于a/b==1这种局面,只可能到b,a%b,没有选择。而a/b>=2的话,先手可以选择由谁面对b,a%b这样的局势
显然选手足够聪明b,a%b谁必胜必败已经清楚,先手在a/b>=2的局面必胜
[cpp]
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#define LL long long?
#define N 1000000?
#define inf 1<<20?
using namespace std;?
int main(){?
??? int a,b;?
??? while(scanf("%d%d",&a,&b)!=EOF&&a+b){?
??????? if(a
??????????? swap(a,b);?
??????? bool stan=true;?
??????? while(1){????????????
??????????? if(b==0||a%b==0||a/b>=2) break;?
??????????? int t=a;?
??????????? a=b;?
??????????? b=t-a;?
??????????? stan=!stan;?
??????? }?
??????? if(stan)?
??????????? printf("Stan wins\n");?
??????? else?www.2cto.com
??????????? printf("Ollie wins\n");?
??? }?
??? return 0;?
}?
?????

作者:ACM_cxlove