• poj 2975 Nim


    Nim

     POJ - 2975 

    题目大意:给定一种Nim状态(相当于含N堆石头),求能有几种方法能通过调整某一堆石头的状态(只准取出),使新的Nim状态为必败态。(或者说求出所给的Nim游戏状态有多少种方法能够赢)

    /*
        不妨假设一共有三堆石子,第i堆石子的个数用ai来表示,可以知道如果当前局面a1^a2^a3=0那么先手必败
        所以题目要求的便是使得当前局面改变一个a值变成a1^a2^a3=0的方案数
        所以此时a1^a2^a3!=0,假设a1^a2^a3=k;
        则一定存在某个ai,它的二进制表示在k的最高位上是1,这时ai^k<ai一定成立。则我们可以将ai改变成ai'=ai^k,就能得到a1^a2^a3=0的局面
        进而题目转化为满足ai^k<ai的ai的个数 
    */
    #include<iostream>
    #include<cstdio>
    #define maxn 10010
    int n,a[maxn];
    using namespace std;
    int main(){
        while(1){
            scanf("%d",&n);
            if(n==0)return 0; 
            int t=0;
            for(int i=1;i<=n;i++){
                scanf("%d",&a[i]);
                t^=a[i];
            }
            int ans=0;
            for(int i=1;i<=n;i++)
                if((t^a[i])<a[i])ans++;
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    实现个人域名跳转指定网站
    Latex数学符号表
    Python—Matplotlib基础学习
    Python—Pandas基础学习
    Python—Numpy基础学习
    程序员必读的计算机书籍(附资源分享)
    嗷嗷
    CTF之misc
    网安基础思维导图
    NAT、动态路由及实验
  • 原文地址:https://www.cnblogs.com/thmyl/p/8134246.html
Copyright © 2020-2023  润新知