Advertisement
TAImatem

Решение Максимальное И

Jan 13th, 2023
1,281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.41 KB | None | 0 0
  1. void solveD()
  2. {
  3.     int n, ans = 0;
  4.     cin >> n;
  5.     vector<vector<int>> a(1, vector<int>(n)), b(1, vector<int>(n));
  6.     for (auto& ai : a[0])
  7.         cin >> ai;
  8.     for (auto& bi : b[0])
  9.         cin >> bi;
  10.     for (int bit = 29; bit >= 0; bit--)
  11.     {
  12.         bool cansep = true;
  13.         for (int pi = 0; pi < a.size() && cansep; pi++)
  14.         {
  15.             int cnt = 0;
  16.             for (auto& ai : a[pi])
  17.                 cnt += (ai & (1 << bit)) >> bit;
  18.             for (auto& bi : b[pi])
  19.                 cnt += (bi & (1 << bit)) >> bit;
  20.             if (cnt != a[pi].size())
  21.                 cansep = false;
  22.         }
  23.         if (cansep)
  24.         {
  25.             ans += (1 << bit);
  26.             vector<vector<int>> new_a(a.size() * 2), new_b(a.size() * 2);
  27.             for (int pi = 0; pi < a.size(); pi++)
  28.             {
  29.                 int cnt = 0;
  30.                 for (auto& ai : a[pi])
  31.                     if (ai & (1 << bit))
  32.                         new_a[pi * 2].push_back(ai);
  33.                     else
  34.                         new_a[pi * 2 + 1].push_back(ai);
  35.                 for (auto& bi : b[pi])
  36.                     if (bi & (1 << bit))
  37.                         new_b[pi * 2 + 1].push_back(bi);
  38.                     else
  39.                         new_b[pi * 2].push_back(bi);
  40.             }
  41.             a.clear();
  42.             b.clear();
  43.             for (int pi = 0; pi < new_a.size(); pi++)
  44.             {
  45.                 if (new_a[pi].size())
  46.                 {
  47.                     a.push_back(vector<int>());
  48.                     swap(a.back(), new_a[pi]);
  49.                     b.push_back(vector<int>());
  50.                     swap(b.back(), new_b[pi]);
  51.                 }
  52.             }
  53.         }
  54.     }
  55.     cout << ans << endl;
  56. }
  57.  
  58. int main() {
  59. #ifdef DEBUG
  60.     freopen("input.in", "r", stdin);
  61.     freopen("output.out", "w", stdout);
  62. #endif
  63.     int t;
  64.     cin >> t;
  65.     while (t--)
  66.         solveD();
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement