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; }