In this HackerEarth A color box problem solution You are given an array A of N integers where the ith element denotes that Bob has A[i] buckets of color i.

In one move, Bob can pick two buckets with the same color and transform them into a bucket of any other color.

Now, Bob is also given an array B of N integers where the ith element denotes that Bob needs at least B[i] buckets of color i. Find if it is possible for Bob to get the required number of buckets for each color using the specified moves. If possible, print 'Yes' else 'No' without quotes.


HackerEarth A color box problem solution


HackerEarth A color box problem solution.

#include "bits/stdc++.h"
#define int long long int
using namespace std;

signed main() {
int t;
cin >> t;
assert(1 <= t and t <= 10);
for(int i = 1 ; i <= t ; i++){
int n;
cin >> n;
assert(1 <= n and n <= 1000);
int a[n], b[n];
for(int i = 0 ; i < n ; i++){
cin >> a[i];
assert(0 <= a[i] and a[i] <= 100000);
}

for(int i = 0 ; i < n ; i++){
cin >> b[i];
assert(0 <= b[i] and b[i] <= 100000);
}

int have = 0;
int req = 0;
for(int i = 0 ; i < n ; i++){
if(a[i] == b[i]) continue;
if(a[i] > b[i]){
have += ((a[i] - b[i])/2);
}
else if(a[i] < b[i])
{
req += (b[i] - a[i]);
}
}

if(have >= req) cout << "Yes" << endl;
else cout << "No" << endl;

}
}

Second solution

t = int(input())

while t > 0:
t -= 1
n = int(input())
print('Yes' if sum((x - y) // 2 if x > y else x - y for x, y in
zip(map(int, input().split()), map(int, input().split()))) >= 0 else 'No')