首先枚举
k
k
k ,先枚举当
k
k
k 为奇数的情况,当
k
=
1
k=1
k=1 的时候,显然
n
n
n 为奇数的时候先手必胜,此时需要走1步便可通往
P
P
P 点。
当
k
=
3
k=3
k=3 的时候:
下标
0
1
2
3
4
5
6
7
8
9
状态
P
P
P
N
N
N
P
P
P
N
N
N
P
P
P
N
N
N
P
P
P
N
N
N
P
P
P
N
N
N
同样当
k
=
5
k=5
k=5 的时候,状态表跟上图一样;可以发现当
k
k
k 是奇数的时候,永远满足
n
n
n 为奇数的时候先手必胜,并且1步可以通往
P
P
P 点;反之
n
n
n 为偶数的时候先手必败。
当
k
k
k 为偶数的时候,画出
k
=
2
k=2
k=2 的图如下:
下标
0
1
2
3
4
5
6
7
8
9
状态
P
P
P
N
N
N
N
N
N
P
P
P
N
N
N
N
N
N
P
P
P
N
N
N
N
N
N
P
P
P
同样画出当
k
=
4
k=4
k=4 的时候状态图如下:
下标
0
1
2
3
4
5
6
7
8
9
10
11
状态
P
P
P
N
N
N
P
P
P
N
N
N
N
N
N
P
P
P
N
N
N
P
P
P
N
N
N
N
N
N
P
P
P
N
N
N
可以发现,当
k
k
k 为偶数的时候,从0开始,
k
+
1
k+1
k+1 个长度为一个周期,其中当
n
%
(
k
+
1
)
=
k
n\%(k+1)=k
n%(k+1)=k 的时候为
N
N
N 点,其余
0
到
(
k
−
1
)
0到(k-1)
0到(k−1) 按照奇数的情况。
所以当
n
%
(
k
+
1
)
=
k
n\%(k+1)=k
n%(k+1)=k 时,需要走
k
k
k 步到达下一个
P
P
P 点,否则当
n
%
(
k
+
1
)
n\%(k+1)
n%(k+1) 为奇数时,走1步便可通往下一个
P
P
P 点。
#include<bits/stdc++.h>
using namespace std;typedeflonglong ll;typedefunsignedlonglong ull;typedefunsignedint uii;typedef pair<int, ll> pii;
template<typename T>inlinevoidrd(T& x){int tmp =1;char c =getchar(); x =0;while(c >'9'|| c <'0'){if(c =='-')tmp =-1; c =getchar();}while(c >='0'&& c <='9'){ x = x *10+ c -'0'; c =getchar();}
x *= tmp;}constint N =2e5+10;constint M =1e7+10;constint mod =1e9+7;constint inf =0x3f3f3f3f;int n, m, k;intmain(){#ifdef _DEBUG
FILE* _INPUT =freopen("input.txt","r",stdin);// FILE* _OUTPUT = freopen("output.txt", "w", stdout);#endif// !_DEBUGint cas =0, T =0;rd(T);while(T--){// while (~scanf("%d %d", &n,&k)) {rd(n),rd(k);if(k &1){if(n &1)puts("1");elseputs("0");}else{int tmp = n %(k +1);if(tmp == k)printf("%d\n", k);elseif(tmp &1)puts("1");elseputs("0");}}return0;}