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则第二个人赢,否则第一个人赢。

2013 ACM/ICPC 长春网络赛F题
#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

 

你可能感兴趣的:(ICPC)