您的位置:首页 > 其它

nyoj 2359 巴什博弈?(博弈——找规律)

2017-10-17 17:03 218 查看

巴什博弈?

题目描述

有n个石子,有两人轮流从中取石子,最少a个最多b个,谁没得取(即当轮到他取是已经没有石子可以取了,也就是说此时石子数量小于a)谁赢,现在,LLM先取,问你LLM能赢吗


输入

每个测试样例少于100000组测试数据

每组测试样例第一行三个整数n,a,b

1<=a<=b,n<=100000000


输出

如果LLM能赢,输出YES,否则输出NO


样例输入

1 1 1

2 1 2

样例输出

NO

YES

思路:类似于巴什博弈,那就直接找先手必胜的条件了

n先取余(a+b)得到k

如果k≥2a的话,先手可以先拿k-a个,只要给后手留下a个,那就肯定能赢

如果k<a的话,先手可以先拿b个,后手无论拿多少个,最后剩下的一定小于a个

(例如n=x*a+(x-1)b-1即k=a-1时,先手先拿b个,后手拿t个,先手接着拿a+b-t个,这样一直循环,最后轮到后手的时候一定剩下2a-1(a+k)个,所以后手必败)

代码:

#include<stdio.h>

int main()
{
int n,a,b;
while(~scanf("%d%d%d",&n,&a,&b))
{
int k=n%(a+b);
if(k>=2*a||k<a)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: