2546. 取石块儿[博弈]

2546. 取石块儿

★   输入文件:tstones.in   输出文件:tstones.out   简单对比
时间限制:1 s   内存限制:256 MB

问题描述

小L和小T进行取石块儿游戏,给定一个整数n表示石块儿总数,给定一个整数k表示每次最多能拿走的石块儿数量,小L先手,每次能拿走1~k个石块儿,他们中总会有一个人最后拿走s块儿石块儿,使得剩余石块儿数量为0,则最后一个拿走剩下石块儿的人获胜,另外一个人失败。小T非常聪明,小L绝顶(秃子(逃))聪明,请判断小T是否能取胜。

输入格式

第一行一个整数T表示数据组数,接下来T行每行两个整数n,k意义为描述所给。

输出格式

对于每组数据,输出"YES"或者"NO"(不带引号),代表小T是否能够获胜。

输入样例

2
2 1
10 4

输出样例

YES
YES

数据范围

大胆骗分出奇迹!

 

对于10%的数据,1kn5

对于另外10%的数据,k=1,1n10000

对于另外20%的数据,1kn1000,T10

对于另外40%的数据,1knunsigned int

对于全部的测试数据,1knunsigned long long,1T1000000

/*
博弈.
当n<=k时,显然先手必胜.
否则n=k+1时先手必败.
n属于[k+2,2k+1]时,总能回到n=k+1的状态,所以先手必胜.
同理 n=2(k+1),3(k+1)时先手必败......
所以 k+1|n时先手必败
否则先手必胜.
*/
#include<cstdio>
#include<iostream>
using namespace std;
int main(){
    freopen("tstones.in","r",stdin);
    freopen("tstones.out","w",stdout);
    int t;unsigned long long n,k;
    cin>>t;
    while(t--){
        cin>>n>>k;
        puts((!(n%(k+1)))?"YES":"NO");
    }
    return 0;
}

 

posted @ 2017-03-17 05:45  神犇(shenben)  阅读(155)  评论(0编辑  收藏  举报