zoukankan      html  css  js  c++  java
  • hdu2897找规律

    又是找规律,无语了,说好的博弈呢,搞了半天的sg函数没有一点头绪

    当n%(p+q)==0时,先手win,第一次取q个,以后每次,后手取k个,先手就取p+q-k个,最后,后手必取q个

    当n=(p+q)*k+s(p<s<q)时,先手win,第一次取t(s-p<t<s)个,以后每次,后手取k个,先手就取p+q-k个,最后,后手必取小于p个

    当n=(p+q)*k+s(1<s<=p)时,先手lost,第一次取k个,后手取p+q-k个,最后先手必取小于p个

    #include<map>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<cstdio>
    #include<cassert>
    #include<iomanip>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define pi acos(-1)
    #define ll long long
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    
    using namespace std;
    
    const double g=10.0,eps=1e-9;
    const int N=1000+10,maxn=111117,inf=11111;
    
    int f[N],sg[N],Hash[N];
    int p,q;
    int getsg(int n)
    {
        memset(Hash,0,sizeof Hash);
        for(int i=1;i<=p-q;i++)
        {
            if(n-f[i]<0)break;
            if(sg[n-f[i]]==-1)
                sg[n-f[i]]=getsg(n-f[i]);
            Hash[sg[n-f[i]]]=1;
        }
        for(int i=0;;i++)
            if(!Hash[i])
               return i;
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        int n;
        while(cin>>n>>p>>q){
       /*     for(int i=1;i<=p-q;i++)
                f[i]=p+i;
            memset(sg,-1,sizeof sg);
            getsg(n);*/
            if(n%(p+q)==0||n%(p+q)>p)cout<<"WIN"<<endl;
            else cout<<"LOST"<<endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    linux_批量关闭进程
    latex_引用参考文献格式,引用多篇参考文献
    vue跨域解决方法
    vue点击返回顶部插件vue-totop
    百度分享vue版-vshare
    vue项目引入社交分享插件
    vshare
    vue分享插件
    EFCore使用SQL语句
    JDBC Request :Cannot load JDBC driver class 'com.mysql.jdbc.Driver'解决办法
  • 原文地址:https://www.cnblogs.com/acjiumeng/p/6962752.html
Copyright © 2011-2022 走看看