巴什博弈?
题目描述
有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;
}