• C


    题目大意:n个数,任意整数x对这n个数取异或值,然后使最大值最小。

    思路:数据范围最大为pow(2,30);所以考虑二进制的话,最多有30位。对于某一位d,然后考虑数组v中每一个元素的d为是0还是1,将为0的元素放到数组v0中,将为1的元素放到数组v1中。如果v0中的元素个数为0,那么说明这一位置上的元素全为1,所以我们贪心地希望x在该位置上的为1,对于V1同理.如果说v1和v0都不等于0,那么说明x在该位置与其他元素做异或运算,肯定会有1,所以答案为为两种情况的最小值+1<<d.

    ACcode:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const ll N=1E5+7;
    ll arr[N];
    vector<ll >ve;
    ll dfs(ll d,vector<ll >v){
        if(d<0||v.size()==0) return 0;
        vector<ll >v1,v0;
        for(ll i=0;i<v.size();i++){
            if((v[i]>>d)&1){
                v1.push_back(v[i]);
            }
            else v0.push_back(v[i]);
        }
        if(v1.size()==0) return dfs(d-1,v0);
        else if(v0.size()==0) return dfs(d-1,v1);
        else    return min(dfs(d-1,v0),dfs(d-1,v1))+(1<<d);
    }
    int main(){
        ll n;
        cin>>n;
        for(ll i=1;i<=n;i++){
            cin>>arr[i];
            ve.push_back(arr[i]);
        }
        cout<<dfs(30,ve)<<endl;
        return 0;
    }
  • 相关阅读:
    python笔记之条件语句、循环语句、迭代器和生成器
    浅谈IO和NIO
    浅谈java自定义类加载器
    浅谈Synchronized和ReentrantLock
    软工1816 · 第三次作业
    软工1816 · 第二次作业
    软工1816 · 第一次作业
    简单的自我介绍
    The Last
    第七次课程作业
  • 原文地址:https://www.cnblogs.com/Accepting/p/12213489.html
Copyright © 2020-2023  润新知