zoukankan      html  css  js  c++  java
  • hdu 1850 Being a Good Boy in Spring Festival (Nim)

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

    Nim博弈,求保证先手必胜可选的方案数。

    对于一个必胜的局面,至少有一个方案可以到达必败局面。也就是说,对于a1^a2..^an!=0一定有一个ai可以改为ai',且a1^a2..^ai'..^an==0。设a1^a2..^an=k,则一定存在某个ai,它的二进制表示在k的最高位上是1(因为k的最高位为1),那么有ai^k<ai成立。则a1^a2..^an^k=0,可得ai'=ai^k。

    题意找有多少种先手必胜的方案,枚举ai,统计满足ai^k<ai的个数即可。

    code:

    #include<cstdio>
    int a[101] ;
    int main(){
        int n, i, ans, count ;
        while(~scanf("%d", &n)&&n){
            ans = count = 0 ;
            for(i=0; i<n; i++){
                scanf("%d", &a[i]) ;
                ans ^= a[i] ;
            }
            if(!ans){
                printf("0\n");
                continue ;
            }
            for(i=0; i<n; i++)//枚举ai
                if(a[i]>(ans^a[i])) count ++ ;
            printf("%d\n", count) ;
        }
        return 0 ;} 
  • 相关阅读:
    spring 装配核心笔记
    小明种苹果
    线性分类器
    报数
    编程计划2.0 //不断更新
    MySQL基础之存储过程
    MySQL基础之视图
    指令系统.传送类指令
    MySQL基础之索引
    寻址方式总结
  • 原文地址:https://www.cnblogs.com/xiaolongchase/p/2476387.html
Copyright © 2011-2022 走看看