Eksekk

XOR

Jun 30th, 2021 (edited)
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.72 KB | None | 0 0
  1. struct Choice
  2. {
  3.     int a, b;
  4.     int remove;
  5. };
  6.  
  7. struct Ret
  8. {
  9.     long long result;
  10.     vector<Choice> choices;
  11. };
  12.  
  13. Ret bruteForceRecursion(const vector<int>& numbers, int currentResult, const vector<Choice>& choices)
  14. {
  15.     if (numbers.size() <= 1)
  16.     {
  17.         return Ret{currentResult, choices};
  18.     }
  19.  
  20.     Ret max{0, vector<Choice>{}};
  21.     for (int i = 0; i < numbers.size(); ++i)
  22.     {
  23.         for (int j = 0; j < numbers.size(); ++j)
  24.         {
  25.             if (j < i)
  26.             {
  27.                 currentResult += numbers[i] ^ numbers[j];
  28.                 vector<int> numbers2_1(numbers), numbers2_2(numbers);
  29.                 vector<Choice> choices2_1(choices), choices2_2(choices);
  30.  
  31.                 //prepare variables for recursion
  32.                 numbers2_1.erase(numbers2_1.begin() + i); //remove first
  33.                 numbers2_2.erase(numbers2_2.begin() + j); //remove second
  34.  
  35.                 choices2_1.push_back(Choice{numbers[i], numbers[j], numbers[i]});
  36.                 choices2_2.push_back(Choice{numbers[i], numbers[j], numbers[j]});
  37.  
  38.                 //recurse
  39.                 Ret r1 = bruteForceRecursion(numbers2_1, currentResult, choices2_1);
  40.                 Ret r2 = bruteForceRecursion(numbers2_2, currentResult, choices2_2);
  41.  
  42.                 //choose higher result of current and two returned
  43.                 if (r1.result > max.result)
  44.                 {
  45.                     max = r1;
  46.                 }
  47.                 if (r2.result > max.result)
  48.                 {
  49.                     max = r2;
  50.                 }
  51.  
  52.                 //restore environment for next loop iterations
  53.                 currentResult -= numbers[i] ^ numbers[j];
  54.             }
  55.         }
  56.     }
  57.     return max;
  58. }
Add Comment
Please, Sign In to add comment