समस्या विवरण
दिया गया एक रेंज [L, R], हमें इस रेंज में दो इंटीजर्स ढूंढने हैं ताकि उनका XOR सभी संभावित दो इंटीजर्स की पसंद में अधिकतम हो
यदि दिया गया रेंज L = 1 और R = 21 है तो आउटपुट 31 होगा क्योंकि − 31, 15 और 16 का XOR है और यह रेंज के भीतर अधिकतम है।
एल्गोरिदम
1. (L^R) मान की गणना करें 2. इस मान के सबसे महत्वपूर्ण बिट से सभी 1s जोड़कर अंतिम परिणाम प्राप्त करें
उदाहरण
#include <bits/stdc++.h> using namespace std; int getMaxXOR(int L, int R){ int LXR = L ^ R; int msbPos = 0; while (LXR) { msbPos++; LXR >>= 1; } int maxXOR = 0; int two = 1; while (msbPos--) { maxXOR += two; two <<= 1; } return maxXOR; } int main(){ int L = 1; int R = 21; cout << "Result = " << getMaxXOR(L, R) << endl; return 0; }आउटपुट
जब आप उपरोक्त प्रोग्राम को कंपाइल और एक्जीक्यूट करते हैं। यह निम्नलिखित आउटपुट उत्पन्न करता है −
Result = 31