按位贪心

· · 题解

#include<iostream>
#include<cstdio>
using namespace std;
int t,n,a[100010],b[100010];
/*
找到二进制中最高位是1的数 确定次高位的时候只是从二进制最高位是1的数里选 以此类推 
*/
int work(){
    cin>>n; 
    for (int i=1;i<=n;i++) cin>>a[i];
    for(int k=20;k>=0;k--){//最高有20位 
        int top=0; 
        for(int i=1;i<=n;i++) 
            if(a[i]&(1<<k)) b[++top]=a[i];//判断a[i]是否为1 
        if(top>1){
            for(int i=1;i<=top;i++) a[i]=b[i];
            n=top;
        }
    }
    return (a[1]&a[2]);
}
int main(){
    cin>>t;
    for (int i=1;i<=t;i++){
        cout<<"Case #"<<i<<": "<<work()<<endl;
    }
}