北大ACM2348——Euclid's Game

来源:互联网 发布:p2p网络借贷论文 编辑:程序博客网 时间:2024/06/07 17:17

题目的意思:给两个数a 和 b ,每一次只能从较大数中减掉较小数的倍数,先减到0 的获胜。

可以分成两种可能:

b - a < a和b - a > a

第一种情况:

b 只能减去a,而b - a之后是必胜态,则它是必败态,反之就是必胜态。

而第二种情况总是必胜态。

下面的是AC的代码:

#include <iostream>using namespace std;int a, b;void solve(){bool f = true;while(true){if(a > b){a = a ^ b;b = b ^ a;a = a ^ b;}if(b % a == 0)break;if(b - a > a)break;b -= a;f = !f;}if(f)cout << "Stan wins" << endl;elsecout << "Ollie wins" << endl;}int main(){while(cin >> a >> b){if(a == 0 && b == 0)break;solve();}return 0;}


0 0
原创粉丝点击