zoukankan      html  css  js  c++  java
  • HDU 1536 SNim

    师时隔几个月后,在看博弈NIM终于懂了,做出了第一道根据所有堆的异或和的题

    题意:在一个Si容器中,输入可以行走的步数,然后在下面T组测试数据中,输入堆的情况

    View Code
    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    //数组超是开小了 还是开大了
    int enable[101];//可以行走的步数 
    int SG[10001];//SG的数组大小是一堆石子的大小而不是数组的多少的大小 要区别
    int k;
    
    bool cmp(int &a,int &b)
    {
        return a<b;
    }
    
    int get_SG(int a)
    {
        int temp,i;
        int judge[110]={0};//用来寻找mex点 
        for (i=0;i<k;i++)
        {
            temp=a-enable[i];
            if(temp<0)  break;
            if(SG[temp]==-1)  
                SG[temp]=get_SG(temp);
            judge[SG[temp]]=1;
        }
        for (i=0;;i++)
            if(judge[i]==0) return i;
    }
    
    int main()
    {
        int T,i,n,am,j;
        while(scanf("%d",&k) && k)
        {
            for (i=0;i<k;i++)
                scanf("%d",&enable[i]);
            sort(enable,enable+k,cmp);//这里是题目的坑。。。 
            memset(SG,-1,sizeof(SG));
            scanf("%d",&T);
            for (i=0;i<T;i++)
            {
               scanf("%d",&n);
               int ans=0;
               for (j=0;j<n;j++)//这里是第二次错了,当前面循环有i的时候这里不可以用i 
               {
                   scanf("%d",&am);
                   if(SG[am]==-1)
                       SG[am]=get_SG(am);
                   ans^=SG[am];
               }
               if(ans) printf("W");
               else printf("L");
            }
            printf("\n");
        }
        return 0;
    }
  • 相关阅读:
    常用模块
    二分查找算法
    递归函数
    文件操作
    day02--Python基础二(基础数据类型)
    Python学习笔记day01--Python基础
    Python2X和Python3X的区别
    testdisk修复文件系统
    机器学习入门 快速版
    tableau教程 快速入门
  • 原文地址:https://www.cnblogs.com/zsboy/p/2460987.html
Copyright © 2011-2022 走看看