ในปัญหานี้ เราได้รับอาร์เรย์ของจำนวนเต็ม งานของเราคือสร้างค่าสูงสุดของ XOR ในบรรดาแฝดสามของอาร์เรย์
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล − อาร์เรย์ ={5, 6, 1, 2}
ผลผลิต − 6
คำอธิบาย −
All triplets are: 5^6^1 = 2 5^6^2 = 1 5^1^2 = 6 6^1^2 = 5
ในการแก้ปัญหานี้ วิธีการโดยตรงคือการหา XOR ของแฝดสามที่เป็นไปได้ทั้งหมด และพิมพ์ค่าสูงสุดของแฝดสามทั้งหมด สิ่งนี้จะไม่ได้ผลหากเราทำงานกับอาร์เรย์ที่มีองค์ประกอบจำนวนมากในอาร์เรย์
ในการหาค่า XOR สูงสุด ขั้นแรกเราจะสร้างชุดที่มี XOR ของคู่ขององค์ประกอบทั้งหมด จากนั้นเราจะหา XOR ระหว่างคู่ทั้งหมดกับองค์ประกอบ และหาค่า XOR สูงสุด
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#include <bits/stdc++.h> using namespace std; int MaxTripletXor(int n, int a[]){ set<int> XORpair; for (int i = 0; i < n; i++) { for (int j = i; j < n; j++) { XORpair.insert(a[i] ^ a[j]); } } int maxXOR = 0; for (auto i : XORpair) { for (int j = 0; j < n; j++) { maxXOR = max(maxXOR, i ^ a[j]); } } return maxXOR; } int main(){ int matrix[] = {1, 2, 3, 5, 7}; int n = sizeof(matrix) / sizeof(matrix[0]); cout<<"The maximum XOR sum triplets is "<<MaxTripletXor(n, matrix); return 0; }
ผลลัพธ์
The maximum XOR sum triplets is 7