Binary Concatenation Problem Code: BINFUN Codechef Solution

 #include <bits/stdc++.h>
using namespace std;
long long ret(int a,int b){
    int m1=0,m2=0;
    int aa=a,bb=b;
    unsigned long long ans1=a,ans2=b;
    int ma=0,mb=0;
    while(aa){
        ma++;
        aa>>=1;
    }
    while(bb){
        mb++;
        bb>>=1;
    }
    aa=a,bb=b;
    while(mb--){
        ans1<<=1;
        ans1|=1&&((1<<mb)&bb);
    }
    while(ma--){    
        ans2<<=1;
        ans2|=1&&((1<<ma)&aa);
    }
    long long x=ans1,y=ans2;
    return (x>y)?(x-y):(y-x);
}
int main(){
    int t;
    cin>>t;
    int T=t;
    int nn=0;
    while(t--){
        int n;
        cin>>n;
        int mx=0,mn=(1<<30);
        long long ans=0;
        vector<int> a(n);
        nn+=n;
        while(n--){
            cin>>a[n];
            mx=max(mx,a[n]);
        }
        if(nn>1000){
        for(int i=0;i<a.size();i++){
            // for(int j=i+1;j<a.size();j++)
            //     ans=max(ans,ret(a[i],a[j]));
            ans=max(ans,ret(a[i],mx));
        }
    }
    else{
        for(int i=0;i<a.size();i++){
            for(int j=i+1;j<a.size();j++)
                ans=max(ans,ret(a[i],a[j]));
        }
    }
        cout<<ans<<'\n';
    }
  return 0;
}

Comments