现在的位置: 首页 > 综合 > 正文

HDU 4764 Stone (巴什博弈)

2014年09月05日 ⁄ 综合 ⁄ 共 2150字 ⁄ 字号 评论关闭

Stone

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 109    Accepted Submission(s): 85


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
 

Source
 

Recommend
liuyiding

题意:

两个人写数字,要求当前个写的数字Y与前一个写的数字X满足:
1.  1 <= Y - X <= k 
2.  Y要求小于N(第一次取只需满足1<=Y<=k);
不都满足则输。

思路:

可将题目意思理解为取石子(题目有提示),取的石子是有规定的,谁能取到第N-1个,那么就能赢得比赛。
对了,就是巴什博弈。

/*************************************************************************
    > File Name: Stone.cpp
    > Author: BSlin
    > Mail:  
    > Created Time: 2013年09月28日 星期六 12时22分50秒
 ************************************************************************/

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <iterator>
#include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#define MP make_pair
#define INF (1<<30)
#define PI acos(-1.0)
#define esp 1e-8
const int dx[4]={0,0,0,0};
using namespace std;
#define read freopen("in.txt","r",stdin)
#define write freopen("out.txt","w",stdout)
#if defined (_WIN32) || defined (__WIN32) || defined (WIN32) || defined (__WIN32__)
#define LL __int64
#define LLS "%" "I" "6" "4" "d"
#else
#define LL long long
#define LLS "%" "l" "l" "d"
#endif



int main(int argc, char** argv) {
    //read;
    int n,k,ans;
    while(scanf("%d%d",&n,&k)){
        if(n == 0 && k == 0) break;
        if(n == 1) {
            printf("Jiang\n");
            continue;
        }
        else {
            ans =  (n - 1) % (k + 1);
            if(ans == 0) {
                printf("Jiang\n");
            }
            else printf("Tang\n");
        }
    }
    return 0;
}

抱歉!评论已关闭.