Problem: 2061D - Kevin and Numbers
Language: C++23 (GCC 14-64, msys2)

Previous submission (verdict: Wrong answer on test 3):
#include <bits/stdc++.h>

using namespace std;

#ifdef LOCAL

#include "/competitive_programming/debug.cpp"

#else

#define dbg(...)

#endif

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

using i64 = long long;

int main() {

  ios_base::sync_with_stdio(false), cin.tie(0);

  int T;

  cin >> T;

  while (T--) {

    int n, m;

    cin >> n >> m;

    multiset<i64> S, T;

    for (int i = 0; i < n; ++i) {

      int t;

      cin >> t;

      S.insert(t);

    }

    for (int i = 0; i < m; ++i) {

      int t;

      cin >> t;

      if (S.count(t)) {

        S.erase(S.find(t));

      } else {

        T.insert(t);

      }

    }

    while (T.size()) {

      if (S.size() <= 1) break;

      auto b1 = S.begin();

      auto b2 = next(b1);

      i64 c1 = *b1, c2 = *b2;

      S.erase(S.find(c1));

      S.erase(S.find(c2));

      if (c2 - c1 <= 1) {

        i64 v = c1 + c2;

        if (T.count(v)) {

          T.erase(T.find(v));

        } else {

          S.insert(v);

        }

      } else {

        break;

      }

    }

    if (T.size() == 0 && S.size() == 0) {

      cout << "Yes\n";

    } else {

      cout << "No\n";

    }

  }

  return 0;

}



Submission (verdict: Accepted):
#include <bits/stdc++.h>

using namespace std;

#ifdef LOCAL

#include "/competitive_programming/debug.cpp"

#else

#define dbg(...)

#endif

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

using i64 = long long;

int main() {

  ios_base::sync_with_stdio(false), cin.tie(0);

  int T;

  cin >> T;

  while (T--) {

    int n, m;

    cin >> n >> m;

    priority_queue<int> S, S1;

    for (int i = 0; i < n; ++i) {

      int t;

      cin >> t;

      S.push(t);

    }

    for (int i = 0; i < m; ++i) {

      int t;

      cin >> t;

      S1.push(t);

    }

    while (S.size() > 0 && S1.size() > 0) {

      if (S.size() < S1.size()) break;

      int st = S.top(), s1t = S1.top();

      S.pop();

      S1.pop();

      if (st == s1t) {

        continue;

      } else if (st > s1t) {

        break;

      } else {

        S.push(st);

        S1.push(s1t / 2);

        S1.push((s1t + 1) / 2);

      }

    }



    if (S.size() == 0 && S1.size() == 0) {

      cout << "Yes\n";

    } else {

      cout << "No\n";

    }

    // multiset<i64> S, T;

    // for (int i = 0; i < n; ++i) {

    //   int t;

    //   cin >> t;

    //   S.insert(t);

    // }

    // for (int i = 0; i < m; ++i) {

    //   int t;

    //   cin >> t;

    //   if (S.count(t)) {

    //     S.erase(S.find(t));

    //   } else {

    //     T.insert(t);

    //   }

    // }

    // while (T.size()) {

    //   if (S.size() <= 1) break;

    //   auto b1 = S.begin();

    //   auto b2 = next(b1);

    //   i64 c1 = *b1, c2 = *b2;

    //   S.erase(S.find(c1));

    //   S.erase(S.find(c2));

    //   if (c2 - c1 <= 1) {

    //     i64 v = c1 + c2;

    //     if (T.count(v)) {

    //       T.erase(T.find(v));

    //     } else {

    //       S.insert(v);

    //     }

    //   } else {

    //     break;

    //   }

    // }

    // if (T.size() == 0 && S.size() == 0) {

    //   cout << "Yes\n";

    // } else {

    //   cout << "No\n";

    // }

  }

  return 0;

}