题意我就不复制在这惹,反正是英文的,我简单归纳一下吧.
Tang(先)和Jiang(后)两人搁着写字,每个人每次可以写一个数x( 1 ≤ x ≤ 1 \leq x \leq 1≤x≤k),然后相加,哪个人最先取到一个数使得所有数之和大于等于n( 1 ≤ n ≤ 1 0 8 1\leq n \leq10^8 1≤n≤108)就输了.可能翻译不太准,但是结果是对的.
思路
巴什博弈(同余理论)模板题
应该比较简单叭,明显后手可以将一轮的总数控制在 k + 1 k+1 k+1,那么如果刚好 n − 1 n-1 n−1(因为题意是大于等于就输了)为 k + 1 k+1 k+1的倍数,后手就赢了,否则先手赢.
代码
#include <cstdio>
using namespace std;
int main (){
int n, k;
scanf ("%d%d", &n, &k);
while(n&&k){
if((n-1)%(k+1)==0) printf("Jiang\n");
else printf("Tang\n");
scanf ("%d%d", &n, &k);
}
return 0;
}