[YZOJ]P1594--取石子游戏1

(题目原文)

题目描述
Alice和Bob玩取石子游戏。他们的游戏是这样的:总共有 n 个石头,每个人每次可以取 1 到 m 个石头,不能不取。最后取完的人获胜。现在Alice先取,假设双方都采取最好的策略,告诉你 n 和 m,问他是否能赢,如果能,第一次要取几个。
输入格式
只有一行,两个非负整数 n 和 m。
输出格式
第一行 Yes 或 No,表示Alice是否能赢。如果为 Yes,则有第二行,表示要取几个。
样例输入
100 8
样例输出
Yes
1
数据规模与约定
n,m是longint之内的数

一,题目简化
巴什博弈
二,题目分析
小学奥数题
因为对方取的石子是个不确定值,以至于我们无法判断结果。所以我们就要通过策略构造确定值。
先手取得石子数我们是可以控制的,所以把两个和在一起看—>我们可以设置一个值sum,表示双方取得石子每次加在一起都是sum,而我们要确定这个sum,使得无论对方取何值,我们都可以构造出sum
当对方取最小值1时,sum最小为2(1+1),最大为1+m
当对方取最大值m时,sum最小值为1+m,最大值为2m
可以把这个看做类似于不等式的东西,那么sum唯一可以取得是1+m
(图脑补吧)
所以sum唯一可取值是1+m,也就是两段的唯一交接处了
三,题目代码

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
	long long n,m;
	scanf("%lld%lld",&n,&m);
	if(n%(m+1)==0) printf("No\n");
	else printf("Yes\n%lld",n%(m+1));
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值