人人尽说江南好
小 Z 是一个不折不扣的 ZRP(Zealot Round-game Player,回合制游戏狂热玩家),最近他想起了小时候在江南玩过的一个游戏。
在过去,人们是要边玩游戏边填词的,比如这首《菩萨蛮》就是当年韦庄在玩游戏时填 的:
人人尽说江南好,游人只合江南老。
然而我们今天不太关心人们填的词是什么,我们只关心小 Z 那时玩过的游戏。
游戏的规则是这样的,给定 nnn 堆石子,每堆石子一开始只有一个。小 Z 和他的小伙伴轮流操作,小 Z 先行操作。操作可以将任意两堆石子合并成为一堆,当谁不再能操作的时候,谁就输掉了。不过,当一堆石子堆的太高时可能发生危险,因此小 Z 和他的小伙伴规定,任何时刻任意一堆石子的数量不能超过 mmm。即假如现在有两堆石子分别有 aaa 个和 bbb 个,而且 a+b>ma+b>ma+b>m,那么这两堆石子就不能合成一堆。
小 Z 和他的小伙伴都是很聪明的,所以他们总是会选择对自己最有利的策略。现在小 Z 想要知道,在这种情况下,对于一个给定的 nnn 和 mmm,到底是谁能够获得胜利呢?
输入格式
本题包括多组数据。
数据第一行为一个数 TTT,为数据组数。 以下 TTT 行,每行两个正整数 n,mn,mn,m,表示一个对局中的石子堆数和高度限制。
输出格式
输出 TTT 行,每行为 0 或 1,如果为 0 意为小 Z(即先手)会取得胜利,为 1 则为后手会取得胜利。
样例
样例输入
5
7 3
1 5
4 3
6 1
2 2
样例输出
1
1
1
1
0
题解及分析
此题是一道关于博弈论的题目,仔细观察就可以发现这个次数是可以算出来的, 为(n/m)*(m-1)+((n%m)?(n%m-1):0) , 然后就比较简单了
#include<stdio.h>
long long int T,m,n;
int main()
{
long long int ans;
scanf("%lld",&T);
while(T--)
{
scanf("%lld%lld",&n,&m);
long long ans=(n/m)*(m-1)+((n%m)?(n%m-1):0);
if(ans&1) printf("0\n");
else printf("1\n");
}
return 0;
}