博弈论是真的难!?
给你两个数,每次只能从大的那个减去小的数的正整数倍,先得到零的人获胜
分析一下,(假设为x,y,且x>y),x=ky+z,若k>=2,那么我(是不是就可以为所欲为了)想一下减完或者,留一个给对手减是不是都行,然后我再往后分析下,我不就必胜了么?
所以遇到了这种情况或者我可以直接赢的情况(x%y==0)直接输出就好了,否则再找这种情况不就得了(除了这两种情况,我只能规规矩矩的减,正整数倍)
1 #include<iostream>
2 using namespace std;
3
4 bool fun(int &a,int &b)//返回1就出现了赢家
5 {
6 int t1=max(a,b);
7 int t2=min(a,b);
8 a=t2;
9 b=t1%t2;
10 if(t1%t2)//表示非整除
11 {
12 if(t1/t2>=2)//不能整除但是系数大于0也结束
13 return 1;
14 else//继续
15 return 0;
16 }
17 else
18 {
19 return 1;//能整除就结束
20 }
21 }
22 int main(void)
23 {
24 int c;
25 cin>>c;
26 while(c--)
27 {
28 int a,b;
29 cin>>a>>b;
30 bool flag=1;//1表示stan嬴
31 while(!fun(a,b))
32 {
33 flag=!flag;
34 }
35 if(flag==1)
36 cout<<"Stan wins"<<endl;
37 else
38 cout<<"Ollie wins"<<endl;
39 }
40 return 0;
41 }
来源:https://www.cnblogs.com/greenofyu/p/12232043.html