HDU 4764 Stone(巴什博弈)

文章地址:http://henuly.top/?p=370

题目:

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~K的数,当所有数之和到达N时最后一个出数的人输,若想要取得游戏的胜利必须在出数之后所有数之和达到n-1,此时就变为n-1个石子的巴什博弈原型题目。

AC代码:

#include <bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define pb push_back
#define mp make_pair
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> P;
const int INF = 0x3f3f3f3f;
const int maxn = 2e5+5;
const int mod = 1e9+7;
const double eps = 1e-8;
const double pi = asin(1.0)*2;
const double e = 2.718281828459;
void fre() {
    freopen("out.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
}

int main(){
    //fre();
    int n, k;
    while (scanf("%d%d", &n, &k) != EOF, n, k) {
        if ((n - 1) % (k + 1)) {
            printf("Tang\n");
        }
        else {
            printf("Jiang\n");
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/tony5t4rk/article/details/80575554