Advertisement
darrellp

Untitled

Dec 24th, 2021
1,293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 0.91 KB | None | 0 0
  1. void Main()
  2. {
  3.     var a = new List<int> { 2, 4, 5, 7, 10 };
  4.     var b = new List<int> { 13, 14, 15, 16, 17};
  5.     Test(a, b);
  6.     Console.WriteLine();
  7.    
  8.     a = new List<int> { 174, 521, 24, 224, 831, 179, 712, 97 };
  9.     b = new List<int> { 281, 33, 122, 415, 611, 235, 737, 81 };
  10.     Test(a, b);
  11. }
  12.  
  13. void Test(List<int>a, List<int>b)
  14. {
  15.     XorSum(a, b).Dump();
  16.     var max = FindMax(a, b);
  17.     b.Dump();
  18.     max.Dump();
  19. }
  20.  
  21. int XorSum(List<int>a, List<int>b)
  22. {
  23.     return a.Zip(b).Select(t => t.First ^ t.Second).Sum();
  24. }
  25.  
  26. int FindMax(List<int> a, List<int> b)
  27. {
  28.     while (FindIncreasingTranspose(a, b));
  29.     return XorSum(a, b);
  30. }
  31.  
  32. bool FindIncreasingTranspose(List<int> a, List<int> b)
  33. {
  34.     for (var i = 0; i < a.Count - 1; i++)
  35.     {
  36.         for (var j = i + 1; j < a.Count; j++)
  37.         {
  38.             if ((a[i] ^ b[j]) + (a[j] ^ b[i]) - (a[i] ^ b[i]) - (a[j] ^ b[j]) > 0)
  39.             {
  40.                 (b[i], b[j]) = (b[j], b[i]);
  41.                 return true;
  42.             }
  43.         }
  44.     }
  45.     return false;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement