题中给了提示,如果轮到某个人取时,大的那一堆是小的两倍以上,则这个人一定赢。所以每次取之前先判断。还有一种情况就是取完之后某一堆被取空,则也赢了。
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<algorithm>
using namespace std;
int a,b,A,B;//A>B
void dfs(int a,int b,int step){//step表示第几次取的动作之前
if(a/b>=2||b/a>=2){//判断
if(step%2==0) printf("lose\n");
else printf("win\n");
return;
}
if(a>b) a=a-b;//取
else b=b-a;
if(a==0||b==0){//再判断
if(step%2==0) printf("lose\n");
else printf("win\n");
return;
}
dfs(a,b,step+1);
}
int main() {
while(scanf("%d%d",&a,&b),a+b){
A=max(a,b);
B=min(a,b);
dfs(A,B,1);
}
return 0;
}