Step1 Problem:
近来,小豪和小皓各获得了一个播放器,他们喜欢的不得了,天天见人便炫耀他们的播放器。
某一天,两个小 Hao 碰到了一起,发现对方也有一个播放器,便都心想得到对方的播放器,他们约定了一个游戏,如果谁赢了便可以得到对方的播放器,游戏规则如下:
小豪的播放器价值为 a,小皓的播放器价值为 b,将两个数中大的数,减去若干小的数的倍数,谁最终把一个数减为 0 的话就胜了(假设两个小 Hao 足够聪明)。
Step2 Ideas:
我们假设a <= b
如果当前状态 b%a==0,那么我们可以让 b = 0,那么必胜状态。
如果当前状态 b > 2*a, 那么我们有选择的权力,下一回合我们先手或者后手。那么必胜状态
否则我们没有选择的权力,主动权只能轮到对方。
Step3 Code:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
ll a, b;
int Case = 1;
while(cin >> a >> b) {
printf("Case %d:\n", Case++);
int f = 1;
for(;;) {
if(a > b) swap(a, b);
if(b%a == 0) break;
if(b > 2*a) break;
b = b - a;
f = !f;
}
if(f) printf("UMR\n");
else printf("Have to give up\n");
printf("\n");
}
return 0;
}