Maximum AND Problem Code: MAXAND18 Solution Codechef

 #include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
using namespace std;
int main(){
    int t;
    cin>>t;
    while(t--){
        vector<pair<long long int,int> > a;
        vector<int> bit(31);
        int n,k;
        cin>>n>>k;
        vector<int> nums(n);
        for(int i=0;i<n;i++)
            cin>>nums[i];
        for(int i=0;i<n;i++){
            for(int j=0;j<31;j++){
                if(nums[i]&(1<<j))bit[j]++;
            }
        }
        for(int i=0;i<31;i++){
            long long w=((long long)(1<<i))*bit[i];
            a.push_back(make_pair(w,i));
        }
        sort(a.begin(), a.end(),[](auto l,auto r){
            return l.first>r.first || (l.first==r.first && l.second<r.second);
        });
        int ans=0;
        for(int i=0;i<k&&i<a.size();i++){
            ans|=(1<<a[i].second);
        }
        cout<<ans<<endl;
    }
}

Comments