• Good Luck in CET-4 Everybody!


    ----------------------

    这就是一个博弈论

    -------------------------

    题目:Miku

    ----------------------------

    这道题我们既可以找规律:如果N是三的倍数,C就赢了,并且我们也可以用SG函数

    好,那么怎么用SG函数实现呢,首先确定边界。

    如果当前人面前有0个石子,那么显然他输了对吧(最后一个一定被上个人拿走了)

    那么SG[0]=0;(我用0表示当前人必败,1必胜0)

    那么其他情况呢?人肯定是理智的(不然怎么考四级),那么对于某一个状态(当前人的石子数),无论他怎么取,

    导向的状态(sg)都是下一个人必胜,那么他肯定必败了sg{当前}=0;

    同理,只要有一种状态能够sg{下个人的石子数}=0,也就是让下一个人必败,那么他就赢了,对吧

    然后这个过程用dfs来实现

    Code Time

    ------------------------------------------

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int n;
    int j=1;
    int sg[1005];
    int f[1005];
    int mi[15];
    bool check(int x){
        if(f[x])
        return sg[x];
        f[x]=1;
        int ans=0;
        int i;
        for( i=0;mi[i]<=x;++i){
            if(!f[x-mi[i]]){
                check(x-mi[i]);
                f[x-mi[i]]=1;
            }
            ans+=sg[x-mi[i]];
        }
        if(ans==i)
        return sg[x]=0;
        else
        return sg[x]=1;
    }
    int main(){
        mi[0]=1;
        sg[0]=0;
        f[0]=1;
        for(int i=1;i<=10;++i){
            j*=2;
            mi[i]=j;
        }
        while(cin>>n){
            if(check(n))
            cout<<"Kiki
    ";
            else
            cout<<"Cici
    ";
        }
        return 0;
    } 
    Ac
  • 相关阅读:
    Lock、Synchronized锁解析
    js多个计时器互不影响触发
    php Excel文件导入 Spreadsheet_Excel_Reader
    Tcp/ip简介
    对称加密和非对称加密
    AFNetworking 3.0迁移指南
    从 Objective-C 里的 Alloc 和 AllocWithZone 谈起
    iOS 沙盒
    SDWebImage解析
    dSYM文件
  • 原文地址:https://www.cnblogs.com/For-Miku/p/13335795.html
Copyright © 2020-2023  润新知