【博弈】SDUT 3779 小Hao的播放器

本文介绍了一种基于两个玩家间的博弈论游戏算法,通过分析播放器价值a和b的变化规律,确定了游戏胜负的关键因素。当较大数值能被较小数值整除或大于两倍较小数值时,当前玩家处于必胜状态;否则主动权转移至对手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值