• 4.6组队赛H题分石头问题,推导,规律


    题意:Con先手,把每堆石头分成另外二部分,当每堆的石头都为1时当前人输。


    首先我们取最大的那个堆来考虑,不要按照模拟这个游戏的过程的思路走,因为最后是最大的那个堆影响结果,小的堆或者分的小的堆可以直接忽略。

    设当前最大堆石头数量是否能赢的状态为y,那么如果y是必败态,那么y+1,y+2,…,2*y都是必胜态,2*y+1是必败态,如果y是必败态 那么y+1,y+2,…,2*y 我都可以选择让下种状态变成y  所以这些是必胜态。


    对先手来说1必败 2必胜 3必败 4必胜 5必胜 6必胜 7必败  8必胜  2^x-1是这样递推出来的,你会发现只要他足够机智,一定能赢,对于其他不是最大的石子 那么他每次都让他减半,这就会导致每次操作后  剩下石子堆里的最大的那个石子堆一定是前一次操作的最大的石子队分离出来的。为什么要把其他都分一半,因为要采取最优策略啊,默认的他和他的对手是足够“机智”的。。


    #include <bits/stdc++.h>
    
    using namespace std;
    
    int main()
    {
    //    freopen("in.txt","r",stdin);
        int n,tt;
        int t;
        cin>>n;
        int Max = 0;
        while(n--) {
            cin>>tt;
            Max = max(Max,tt);
        }
        bool flag = false;
        Max += 1;
        int d = log2(double(Max));
        if(pow(2,d)==Max)
            flag = true;
        if(!flag)
            cout<<"Constantine";
        else
            cout<<"Mike";
    
        return 0;
    }
    


  • 相关阅读:
    ajax(读取json数据)
    MD5加密出现 无法启动:此实现不是Windows平台FIPS验证的加密算法的一部分
    二维码(android)
    电脑快捷键大全
    OkHttp
    HttpURLConnection 传输数据和下载图片
    子线程更新UI界面的2种方法
    URLConnection(互联网)
    点滴
    SQL 备忘录
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256641.html
Copyright © 2020-2023  润新知