2013 ACM/ICPC 长春网络赛F题

题意:两个人轮流说数字,第一个人可以说区间[1~k]中的一个,之后每次每人都可以说一个比前一个人所说数字大一点的数字,相邻两次数字只差在区间[1~k]。谁先>=N,谁输。问最后是第一个人赢还是第二个人赢。

分析:必胜策略是这样的,想方设法抢到N-1,这样下一个人必然会>=N。

第一个人抢到N-1的方法,就是先说一个数字与N-1的差是k+1的整数倍。

因为在这之后另一个人无论说几,第一个人只要把数字补齐到与N-1差k+1的整数倍即可。

例如另一个人让数字增加a,那么第一个人则让数字增加k+1-a。这样就必然可以抢到N-1。

也有一种情况是第一个采取这种策略,如果N-1本来就是k+1的倍数,那么第一个人无论说几都无法达到与N-1差k+1的整数倍,这样第二个人就可以采取我们刚才说的补齐策略来抢到N-1。则第二个人获胜。

综上,如果(N-1)%(k+1)==0则第二个人赢,否则第一个人赢。

#include <cstdio>
using namespace std;

int N, k;

int main()
{
    while (scanf("%d%d", &N, &k), N | k)
    {
        if ((N - 1) % (k + 1) == 0)
            printf("Jiang\n");
        else
            printf("Tang\n");
    }
    return 0;
}
View Code

 

posted @ 2013-09-28 17:02  金海峰  阅读(546)  评论(0编辑  收藏  举报