zoukankan      html  css  js  c++  java
  • p4301 [CQOI2013]新Nim游戏

    传送门

    分析

    通过nim游戏我们可以知道我们现在的任务就是通过两轮之后使得剩余的几堆异或和为非0数

    所以我们只需要在第一步使得剩余集合的任意非空子集的异或和非0即可

    于是我们考虑线性基

    我们知道线性基所选数会使总和最大且任意非空子集的异或和非0

    于是跑线性基即可

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cctype>
    #include<cmath>
    #include<cstdlib>
    #include<queue>
    #include<ctime>
    #include<vector>
    #include<set>
    #include<map>
    #include<stack>
    using namespace std;
    long long a[110],n,Ans,belong[110];
    inline bool cmp(long long x,long long y){return x>y;}
    inline void work(){
        long long i,j,k;
        for(i=1;i<=n;i++){
          k=a[i];
          for(j=45;j>=0;j--)
            if((1<<j)&a[i]){
              if(!belong[j]){
                  belong[j]=a[i];
                  break;
              }
              a[i]^=belong[j];
            }
          if(!a[i])Ans+=k;
        }
    }
    int main(){
        long long i,j,k;
        scanf("%lld",&n);
        for(i=1;i<=n;i++)scanf("%lld",&a[i]);
        sort(a+1,a+n+1,cmp);
        work();
        printf("%lld
    ",Ans);
        return 0;
    }
  • 相关阅读:
    系统设计实现
    反编译
    android layout analyze
    2016.7.20-notes
    如何认识刘昊然?
    leetcode-中等-队列-二叉树的层次遍历
    leetcode-简单-栈-逆波兰表达式
    leetcode-简单-栈-有效的括号
    队列-链式队列
    队列-循环队列-顺序存储
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/10130885.html
Copyright © 2011-2022 走看看