码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #613 (Div. 2) D - Dr. Evil Underscores(思维,位运算)

时间:2020-01-11 15:20:37      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:return   题目   思维   for   amp   数字   vector   开始   turn   

?? ?? ??

题意:对于一个数组,求一个数字与数组每个元素异或之后的最大值最小,求这个最大值

又是位运算,,题目给出数组元素范围在2^30以内,二进制最多30位,从最高位开始贪心,如果此位置的数组元素有的是1有的是0,最后肯定取1,否则取0,还有就是分组讨论,因为每个bit位只能满足原数组中一部分元素异或后为1

#define int ll
vector<int>a;
int solve(vector<int>v,int bit)
{
    if(bit<=0||v.size()==0) return 0;
    vector<int>zero,one;
    rep(i,v.size())
    {
        if((v[i]>>bit)&1) zero.push_back(v[i]);
        else one.push_back(v[i]);
    }
    if(zero.size()==0) return solve(one,bit-1);
    if(one.size()==0) return solve(zero,bit-1);
    return (min(solve(one,bit-1),solve(zero,bit-1))|1<<bit);
}
signed main()
{
    int n;cin>>n;
    a.resize(n);cin>>a;
    cout<<solve(a,30)<<endl;
    return 0;
}

Codeforces Round #613 (Div. 2) D - Dr. Evil Underscores(思维,位运算)

标签:return   题目   思维   for   amp   数字   vector   开始   turn   

原文地址:https://www.cnblogs.com/Herlo/p/12179762.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!