In this HackerEarth Fill the boxes Numbers problem solution You are given an array of size N, denoting capacity of N boxes, and an integer K, denoting extended capacity factor. You are also given the weights of M balls. Each ith box can accommodate exactly one ball having weight in the range [capacityi, capacityj + K] (both inclusive). Find the maximum number of boxes that can be filled.


HackerEarth Fill the boxes problem solution


HackerEarth Fill the boxes problem solution.

#include <bits/stdc++.h>
#define sflld(n) scanf("%lld",&n)
#define sfulld(n) scanf("%llu",&n)
#define sfd(n) scanf("%d",&n)
#define sfld(n) scanf("%ld",&n)
#define sfs(n) scanf("%s",&n)
#define ll long long
#define s(t) int t; while(t--)
#define ull unsigned long long int
#define pflld(n) printf("%lld\n",n)
#define pfd(n) printf("%d\n",n)
#define pfld(n) printf("%ld\n",n)
#define lt 2*idx
#define rt 2*idx+1
#define f(i,k,n) for(i=k;i<n;i++)
#define MAXN 100005


using namespace std;
int wt[MAXN],cap[MAXN];
int main()
{
    int t,i,j;
    sfd(t);
    while(t--)
    {
        int n,m,k,x;
        sfd(n);
        sfd(m);
        sfd(k);
        f(i,0,n)
            sfd(cap[i]);
        f(i,0,m)
            sfd(wt[i]);
        sort(cap,cap+n);
        sort(wt,wt+m);
        i=0;
        j=0;
        int ans=0;
        while(i<n&&j<m)
        {
            if(cap[i]<=wt[j]&&wt[j]<=cap[i]+k)
            {
                ans++;
                i++;
                j++;
            }
            else if(wt[j]<cap[i])
                j++;
            else
                i++;
        }
        pfd(ans);
    }
    return 0;
}