NYOJ-2359: 巴什博弈?

2359: 巴什博弈?

时间限制: 1 Sec  内存限制: 30 MB
提交: 263  解决: 55
[提交][状态][讨论版]

题目描述

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

输入

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

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

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

输出

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

样例输入

1 1 12 1 2

样例输出

NOYES
思路:
对于剩余个数小于a的,肯定是必赢得状态
假设剩余个数在大于等于a和小于2a之间,这是必败态,后手足够聪明,每次取得和控制在a+b即可,最后先手最少取a,后手必赢
剩余个数大于等于2a,只要第一步取剩余个数-a个即可,后面讲自己变成后手控制a+b,就能取得胜利
源代码:
#include <iostream>
using namespace std;
int main() {
	int n,a,b;
	while(~scanf("%d %d %d",&n,&a,&b)) {
		int c=n%(a+b);
		if(c>=a&&c<2*a) printf("NO\n");
		else printf("YES\n");
	}
	return 0;
}


posted @ 2017-11-03 01:43  lemonsbiscuit  阅读(130)  评论(0编辑  收藏  举报