题意:给出2个数字a,b( 假设a>b ),两人轮进行如下操作,将b减去a的任意倍,所得的结果要大于等于0,如果等于0则该人胜利,问谁会取得这场游戏的胜利。
思路:1)如果b是a的整数倍,则直接获得胜利。
2 )如果b-a<a,此状态的后继态为P态的话,该状态为N态 ,否则的话,该状态为P态
3 )如果b-a>a,假设b-x*a<a,x为整数倍,如果b-(x-1)a则会变成了第二种情况,如果后继态为P态,则该状态为N态,但是如果后继态为N态,此状态仍然为N态,所以该状态一直为N态。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
using namespace std;
int main(){
int a,b;
while(scanf("%d%d",&a,&b)){
if(a==0&&b==0)
break;
bool flag=true;
while(1) {
if(a>b)
swap(a,b);
if(b%a==0)
break;
if(b-a>a)
break;
b-=a;
flag=!flag;
}
if(flag)
printf("Stan wins\n");
else
printf("Ollie wins\n");
}
}