Header Ad

HackerEarth Maximizing expressions problem solution

In this HackerEarth Maximizing expressions problem solution You are given three arrays A, B, and C. All the three arrays consist of N integers.

You must perform the following operation on each index exactly one time:

Convert(i): Select a positive value D such that Ci & D = D, and update Bi = Bi xor D.

Here, xor and & denotes the bitwise XOR operation and bitwise AND operation.

You are required to maximize the following expression:

S = sigma(n, i = 1) Ai xor Bi


HackerEarth Maximizing expressions problem solution


HackerEarth Maximizing expressions problem solution.

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 100009;
ll n, m, x, y, z;

ll ara1[maxn], ara2[maxn], ara3[maxn];

bool getBit(ll val, ll pos)
{
return (bool)(val & (1LL << pos));
}

int main()
{

cin >> n;
for(ll i = 1; i <= n; i++) scanf("%lld", &ara1[i]);
for(ll i = 1; i <= n; i++) scanf("%lld", &ara2[i]);
for(ll i = 1; i <= n; i++) scanf("%lld", &ara3[i]);
ll anss = 0;

for(ll i = 1; i <= n; i++){

ll tmp = 0;
bool flg = false;

for(ll j = 0; j < 30; j++){
ll mx1 = getBit(ara1[i], j) ^ getBit(ara2[i], j);
ll mx2 = getBit(ara1[i], j) ^ getBit(ara2[i], j) ^ getBit(ara3[i], j);
tmp += (1LL << j) * max(mx1, mx2);
if(mx2 && getBit(ara3[i], j)) flg = true;
}

if(!flg){
ll lstSetbit = 0;
while(getBit(ara3[i], lstSetbit) == 0) lstSetbit++;
if(getBit(tmp, lstSetbit) == 0) assert(false);

tmp -= (1LL << lstSetbit);
}

anss += tmp;

}

cout << anss << endl;

return 0;
}

Post a Comment

0 Comments