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 ;} 
  • 相关阅读:
    深入理解DB2缓冲池(BufferPool)
    收银台采坑总结
    webpack4的总结
    无心法师-讲解
    cache 缓存的处理
    用es6方式的写的订阅发布的模式
    Skeleton Screen -- 骨架屏--应用
    promise实现原理
    业务线移动端适配方案总结
    vdom,diff,key 算法的了解
  • 原文地址:https://www.cnblogs.com/xiaolongchase/p/2483243.html
Copyright © 2011-2022 走看看