Problem: 2061D - Kevin and Numbers
Language: c++20 

Code 1:
#include <bits/stdc++.h>

typedef long long ll;
using namespace std;
#define MOD 1000000007
#define MAX_N 200000

// vector<long long> fact(MAX_N + 1), inv_fact(MAX_N + 1);

// long long mod_inverse(long long x, long long mod) {
//     long long result = 1;
//     long long power = mod - 2;
//     while (power) {
//         if (power & 1) result = result * x % mod;
//         x = x * x % mod;
//         power >>= 1;
//     }
//     return result;
// }

// void precompute_factorials() {
//     fact[0] = inv_fact[0] = 1;
//     for (int i = 1; i <= MAX_N; ++i) {
//         fact[i] = fact[i - 1] * i % MOD;
//     }
//     inv_fact[MAX_N] = mod_inverse(fact[MAX_N], MOD);
//     for (int i = MAX_N - 1; i >= 1; --i) {
//         inv_fact[i] = inv_fact[i + 1] * (i + 1) % MOD;
//     }
//     inv_fact[0] = 1;
// }

// long long comb(int n, int k) {
//     if (k > n || k < 0) return 0;
//     return fact[n] * inv_fact[k] % MOD * inv_fact[n - k] % MOD;
// }

void solve()
{
    int n, m;
    cin >> n >> m;
    priority_queue < ll, vector < ll > , greater < ll >> q;
    map < ll, int > mp;
    for (int i = 0; i < n; i++)
    {
        int val;
        cin >> val;
        q.push(val);
    }
    for (int i = 0; i < m; i++)
    {
        int val;
        cin >> val;
        mp[val]++;
    }

    while (!q.empty() && n >= m)
    {
        ll first = q.top();
        q.pop();
        n--;
        if (mp[first] > 0)
        {
            mp[first]--;
            m--;
        }
        else if (!q.empty() && abs(first - q.top()) <= 1)
        {
            if (mp[first + q.top()] > 0) {
                mp[first + q.top()]--;
                q.pop();
                n--;
                m--;
            }
            else
            {
                ll val = q.top();
                q.pop();
                q.push({
                    first + val
                });

            }

        }
        else
        {
            cout << "NO" << "\n";
            return;
        }
    }
    if(m==0)
    cout << "YES" << "\n";
    else
    cout<<"NO"<<"\n";

}


int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    int t;
    cin >> t;
    while (t--)
    {


        solve();

    }
    return 0;



}

Code 2:
#include <bits/stdc++.h>

typedef long long ll;
using namespace std;
#define MOD 1000000007
#define MAX_N 200000

// vector<long long> fact(MAX_N + 1), inv_fact(MAX_N + 1);

// long long mod_inverse(long long x, long long mod) {
//     long long result = 1;
//     long long power = mod - 2;
//     while (power) {
//         if (power & 1) result = result * x % mod;
//         x = x * x % mod;
//         power >>= 1;
//     }
//     return result;
// }

// void precompute_factorials() {
//     fact[0] = inv_fact[0] = 1;
//     for (int i = 1; i <= MAX_N; ++i) {
//         fact[i] = fact[i - 1] * i % MOD;
//     }
//     inv_fact[MAX_N] = mod_inverse(fact[MAX_N], MOD);
//     for (int i = MAX_N - 1; i >= 1; --i) {
//         inv_fact[i] = inv_fact[i + 1] * (i + 1) % MOD;
//     }
//     inv_fact[0] = 1;
// }

// long long comb(int n, int k) {
//     if (k > n || k < 0) return 0;
//     return fact[n] * inv_fact[k] % MOD * inv_fact[n - k] % MOD;
// }

void solve()
{
    int n, m;
    cin >> n >> m;

    map < ll, int > mp;


    for (int i = 0; i < n; i++)
    {
        int val;
        cin >> val;
        mp[val]++;

    }
    priority_queue < int, vector < int > , greater < int >> q;

    for (int i = 0; i < m; i++)
    {
        int val;
        cin >> val;
        q.push(val);

    }
    int c = n - m;
    while (!q.empty() && c)
    {
        if (mp[q.top()] > 0)
        {
            mp[q.top()]--;
            q.pop();
        }
        else
        {
            int val = q.top();
            q.pop();
            q.push(val / 2);
            q.push(ceil(val / 2.0));
            c--;
        }

    }

    while (!q.empty())
    {
        if (mp[q.top()] == 0)
        {
            cout << "NO\n";
            return;
        }
        mp[q.top()]--;
        q.pop();
    }
    for (auto i: mp)
    {
        if (i.second)
        {
            cout << "NO\n";
            return;
        }
    }
    cout << "YES" << "\n";


}


int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    int t;
    cin >> t;
    while (t--)
    {


        solve();

    }
    return 0;



}

Answer: 2