zoukankan      html  css  js  c++  java
  • 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
    ");
            else
                printf("Tang
    ");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    个人工作总结(2)
    个人工作总结(1)
    学习进度条
    学习进度条
    返回一个二维整数数组中最大联通子数组的和
    学习进度条
    构建之法阅读笔记02
    STM32F4寄存器初始化:PWM输出
    STM32F4跳转函数
    STM32F4寄存器串口DMA汇总
  • 原文地址:https://www.cnblogs.com/rainydays/p/3344398.html
Copyright © 2011-2022 走看看