zoukankan      html  css  js  c++  java
  • 【博弈论】Road to Arabella Gym 102263B

    题目:

    题目大意:输入n,k。两个人轮流选一个数x(1<=x<=max(1,n-k))减去n,若到一个人的回合n=0那么那个人失败。Kilani先手。

    通过手动模拟几个实例,很容易发现先手基本都是胜利的。

    如 n取10,k取2;

    先手的取值范围是[1,8],这时x取8一定能获胜,因为当x=8时n=2,后手只能取1,一轮后,先手获胜。

    n取10,k取3;

    先手的取值范围是[1,7],这时x取6一定能获胜,因为当x=6时n=4,后手同样只能取1,此时n又是偶数,几轮下来先手获胜。

    根据实例可以归纳出,只要先手取x使n为偶数并且n-k<=1,就必定获胜。

    加以数学证明:

    设x为先手必胜,所选取的数,所以

    n-x-k<=1  ①

    (n-x)%2=0  

    ①整理得 x>=n-k-1;

    x∈[1,max(1,n-k)];

    当n-k>1时,x∈[1,n-k];

    取最大x=n-k;

    所以 x<=n-k-1 恒成立;

    x-1<=n-k-1 恒成立;

    当n,k是偶数时(n-x)%2=0 成立

    当n,k是奇数时(n-x)%2=0 成立

    当n,k一奇一偶时(n-x-1)%2=0 成立

    所以 当 n-k>1时 先手必胜

    当n-k<=1时,x=1;

    此时若n为偶则后手胜利,反之先手胜利;

    AC代码:

    #include<iostream>
    
    using namespace std;
    
    int main() {
        int t, n, k;
        int flag;
        cin >> t;
        while (t--) {
            flag = 1;
            cin >> n >> k;
            if ((n - k == 1 )||(n-k==0))
                if(n % 2 == 0)flag = 0;
    
            if (flag)cout << "Kilani\n";
            else cout << "Ayoub\n";
        }
        
    }
  • 相关阅读:
    AI常用环境安装
    ubantu打开摄像头失败
    python 从ubantu环境迁移到windows环境
    mystar01 nodejs MVC 公共CSS,JS设置
    Golang数据类型之结构体-上篇
    Golang基准测试
    浅谈Prometheus的数据存储
    Golang单元测试
    Jenkins连接k8s的多种姿势
    Golang数据类型之指针
  • 原文地址:https://www.cnblogs.com/komet/p/12900311.html
Copyright © 2011-2022 走看看