链接:https://www.luogu.com.cn/problem/P1290
不妨假设\(b\leq a\)。
显然,当\(a\)是\(b\)的倍数时,为必胜态。
接下来考虑\(a\)不为\(b\)的倍数时:
1.\(a\)小于\(2*b\)时,当前的人只能将较大的数减去较小的数,直到出现必胜态,根据出现必胜态之前进行的轮数,判定当前为必胜态或必败态。
2.\(a\)大于等于\(2*b\)时,当前操作可以转移到1.中的情况或者1.中情况的上一轮,也就是说,一定可以转移到必胜态。
因此,我们只需找到谁能抢先达到必胜态。
void solve() {
int a, b;
cin >> a >> b;
int cnt = 0;
if (a < b) swap(a, b);
if (a % b != 0 && a / b <= 1) {
while (a % b != 0 && a / b <= 1) {
a -= b;
if (a < b) swap(a, b);
cnt ++;
}
}
cout << ((cnt & 1) == 0 ? "Stan wins\n" : "Ollie wins\n");
}
标签:洛谷,int,欧几里德,P1290,必胜,当前
From: https://www.cnblogs.com/coldarra/p/16712238.html