zoukankan      html  css  js  c++  java
  • EZOJ #224

    传送门

    分析

    首先我们发现要让答案最小,或运算一定是没有用的

    我们还可以发现a^b = a&(~b)

    所以异或运算也没有用

    于是我们只考虑否和与

    我们还会得到一个性质就是没增加一个数一定会让答案的1的个数至少减少一半

    因为我们会让答案与上a和(~a)中是的答案的0的数量增加最多的一个

    所以最坏增加剩余1的数量的一半

    所以当n大于9时一定使答案为0

    于是我们只需要在n小于等于9的时候2^n枚举所有情况去最小值即可

    代码

    #include<bits/stdc++.h>
    using namespace std;
    #define int unsigned long long
    int n,m,a[1100],now,Ans;
    inline void go(int wh){
        if(wh==n){
          Ans=min(Ans,now);
          return;
        }
        int be=now;
        now=be&(a[wh+1]);
        go(wh+1);
        now=be&(~a[wh+1]);
        go(wh+1);
    }
    signed main(){
        int i,j,k;
        int t;
        cin>>t;
        while(t--){
          cin>>n;
          for(i=1;i<=n;i++)cin>>a[i];
          Ans=~(int)0;
          if(n>=10)puts("0");
            else now=~(int)0,go(0),printf("%llu
    ",Ans);
        }
        return 0;
    }
  • 相关阅读:
    virtualenvwrapper GitBash下的配置使用
    MySQL主从复制
    Nginx
    LVS
    MySQL
    Docker Swarm
    flask数据库操作
    flask 数据库迁移
    pytest.mark.parametrize 详解
    redis作为变量池在接口自动化中的应用
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/10527439.html
Copyright © 2011-2022 走看看