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

来源:互联网 发布:企业介绍小程序源码 编辑:程序博客网 时间:2024/06/05 08:41

巴什博弈?

题目描述

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