Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค่าสูงสุดของ XOR ในบรรดา triplets ทั้งหมดของอาร์เรย์ใน C++


ในปัญหานี้ เราได้รับอาร์เรย์ของจำนวนเต็ม งานของเราคือสร้างค่าสูงสุดของ 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