zoukankan      html  css  js  c++  java
  • 巴什博弈

    处理何种问题:有n个石子,两个人轮流取石子,规定至少取1个,最多取k个,最后取光者获胜。

     

    性能:时间复杂度为O(1)

     

    原理:n%(k+1)==0,后手必胜(先手无论怎么取,后手只需要补全至k+1个即可);n%(k+1)!=0,先手必胜(先手只需要第一次将n%(k+1)的余数取尽,先手就转成“后手”了)

     

    实现步骤:略

     

    备注:遇到此类问题可向巴什博弈方向转化,例如:有n个石子,两个人轮流取石子,规定至少取1个,最多取k个,最后取光者输掉游戏(区别于上面赢)。因为是取掉最后一个必输,也就是说,最后一局取走的石子数肯定是1,所以问题就变为有(n-1)个石子的巴什博弈了。

     

    输入样例解释

    55  6 // 55个石子,每次最多取6个

    545  8

     

    输出样例解释

    First Win  //先手获胜

    First Win

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    
    int main()
    {
        int n,k;
        while(~scanf("%d%d",&n,&k))
        {
            if(n%(k+1)==0)
                printf("Second Win
    ");
            else
                printf("First Win
    ");
        }
        return 0;
    }
    

      

  • 相关阅读:
    Kafka中的数据清理(logdeletion)
    genymotion虚拟器笔记
    layui hover显示图片
    vue 导出到excel
    el-tree知识积累
    js 含有对象的数组去重
    苏宁易购价格爬取(golang)
    vue+elementui+beego笔记
    vue笔记
    beego笔记
  • 原文地址:https://www.cnblogs.com/l1l1/p/9483453.html
Copyright © 2011-2022 走看看