zoukankan      html  css  js  c++  java
  • hdu 1536 SNim (sg)

    http://acm.hdu.edu.cn/showproblem.php?pid=1536

    计算sg值。

    注意两个地方:

    1. s是无序的。

    2. 不能对n=10000打表,因为能取的个数是给定的,会有打不到的点。

    code:

    #include<cstdio>
    #include<cstring>
    int s[101], sg[10001], k ;
    int mex(int n){
        if(sg[n]!=-1)   return sg[n] ;
        bool vis[101] ;//n最多有100个后继
        int i ;
        memset(vis, falsesizeof(vis)) ;
        for(i=0; i<k; i++){
            if(s[i]>n)  continue ;//不能break, s无序
            sg[n-s[i]] = mex(n-s[i]) ;
            vis[sg[n-s[i]]] = true ;
        }
        for(i=0; vis[i]; i++) ;
        sg[n] = i ;
        return sg[n] ;
    }
    int main(){
        int m, l, i, j, t, sum ;
        while(~scanf("%d", &k)&&k){
            for(i=0; i<k; i++)
                scanf("%d", &s[i]) ;
            memset(sg, -1sizeof(sg)) ;
            sg[0] = 0 ;
            //mex(10000) ;//不能打表,存在打不到的点
            scanf("%d", &m) ;
            while(m--){
                scanf("%d", &l) ;
                sum = 0 ;
                while(l--){
                    scanf("%d", &t) ;
                    sum ^= mex(t) ;
                }
                if(sum) printf("W") ;
                else    printf("L") ;
            }
            printf("\n") ;
        }
        return 0 ;} 
  • 相关阅读:
    html input在标签内设置禁止输入空格
    JS判断json是否为空
    python常见问题集锦
    Node.js入门教程合集
    Vue入门教程合集
    将博客搬至CSDN
    Python 使用PyInstaller打包发布
    VSCode开发Python
    Python 验证码解析
    IntelliJ IDEA常见问题及使用技巧(持续更新)
  • 原文地址:https://www.cnblogs.com/xiaolongchase/p/2483243.html
Copyright © 2011-2022 走看看