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