Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Main()
- {
- var a = new List<int> { 2, 4, 5, 7, 10 };
- var b = new List<int> { 13, 14, 15, 16, 17};
- Test(a, b);
- Console.WriteLine();
- a = new List<int> { 174, 521, 24, 224, 831, 179, 712, 97 };
- b = new List<int> { 281, 33, 122, 415, 611, 235, 737, 81 };
- Test(a, b);
- }
- void Test(List<int>a, List<int>b)
- {
- XorSum(a, b).Dump();
- var max = FindMax(a, b);
- b.Dump();
- max.Dump();
- }
- int XorSum(List<int>a, List<int>b)
- {
- return a.Zip(b).Select(t => t.First ^ t.Second).Sum();
- }
- int FindMax(List<int> a, List<int> b)
- {
- while (FindIncreasingTranspose(a, b));
- return XorSum(a, b);
- }
- bool FindIncreasingTranspose(List<int> a, List<int> b)
- {
- for (var i = 0; i < a.Count - 1; i++)
- {
- for (var j = i + 1; j < a.Count; j++)
- {
- if ((a[i] ^ b[j]) + (a[j] ^ b[i]) - (a[i] ^ b[i]) - (a[j] ^ b[j]) > 0)
- {
- (b[i], b[j]) = (b[j], b[i]);
- return true;
- }
- }
- }
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement