Stone
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2161 Accepted Submission(s): 1523
Problem Description
Tang and Jiang are good friends. To decide whose treat it is for dinner, they are playing a game. Specifically, Tang and Jiang will alternatively write numbers (integers) on a white board. Tang writes first, then Jiang, then again Tang, etc... Moreover, assuming that the number written in the previous round is X, the next person who plays should write a number Y such that 1 <= Y - X <= k. The person who writes a number no smaller than N first will lose the game. Note that in the first round, Tang can write a number only within range [1, k] (both inclusive). You can assume that Tang and Jiang will always be playing optimally, as they are both very smart students.
Input
There are multiple test cases. For each test case, there will be one line of input having two integers N (0 < N <= 10^8) and k (0 < k <= 100). Input terminates when both N and k are zero.
Output
For each case, print the winner's name in a single line.
Sample Input
1 1
30 3
10 2
0 0
Sample Output
Jiang
Tang
Jiang
解析:
1.注意查找必胜状态,因为取到n的为必败状态,所以第一个人胜利的状态什n-1,所以(n-1)%(k+1)!=0是第一个人胜利的状态。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
int judge(int n,int m)
{
if((n-1)%(m+1)==0)
return 1;
else return 0;
}
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
if(n==0&&k==0) break;
else
{
if(judge(n,k))
cout<<"Jiang"<<endl;
else
cout<<"Tang"<<endl;
}
}
return 0;
}

本文介绍了一个关于两个人轮流在白板上写数的游戏,并通过算法确定最优策略下谁将赢得游戏。游戏设定中,玩家需确保所写的数与前一个数之差介于特定范围内,最先达到指定数值者输。文章提供了C++代码实现,用于判断不同参数下赢家归属。
1660

被折叠的 条评论
为什么被折叠?



