https://www.luogu.org/problem/show?pid=1290#sub
这题目好像辗转相除。
每次的两个数 a , b (a>b)
分为两种情况:
一,
此时状态为: a/b>1 ,那最完美的做法是取走(a/b-1)*b,那么剩下的两个数就为(a%b+b,b),
对手唯一的做法就是取走b,剩下(b,a%b),这样就能保证每一次的初状态都是由自己取,那等到
a%b==0 时,就会获胜。所以到这种初状态时,这时的选手一定获胜。
二,
a/b=1
那只能取走b,就会得到(a%b , b),直到第一种状态时,轮到谁谁就获胜
#include<iostream>
#include<cstdio>
#define LL long long
using namespace std;
int n;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
if(a<b) swap(a,b);
int f=1;
while(a/b==1&&a!=b)
{
a=a-b;
swap(a,b);
f=-f;
}
if(f==1) printf("Stan wins
");
else printf("Ollie wins
");
}
return 0;
}