โจทย์
ได้รับช่วง [L, R] งานคือหาคู่ (X, Y) ที่ทำให้ L ≤ X < Y ≤ R และ X & Y มีค่าสูงสุด среди ทุกคู่ที่เป็นไปได้ แล้วพิมพ์ค่า Bitwise AND ของคู่นั้น
ตัวอย่าง
ถ้า L = 1 และ R = 10 ค่า Bitwise AND สูงสุดคือ 8 ซึ่งได้จาก
1000 # Binary representation of 8 Bitwise AND 1001 # Binary representation of 9 ---- 1000 # Final result
อัลกอริทึม
วนลูปจาก L ถึง R และตรวจสอบ Bitwise AND สำหรับทุกคู่ที่เป็นไปได้ แล้วพิมพ์ค่าสูงสุดในท้ายที่สุด
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
int getMaxBitwiseAndValue(int L, int R) {
int maxValue = L & R;
for (int i = L; i < R; ++i) {
for (int j = i + 1; j <= R; ++j) {
maxValue = max(maxValue, (i & j));
}
}
return maxValue;
}
int main() {
int L = 1, R = 10;
cout << "Maximum value = " << getMaxBitwiseAndValue(L, R) << endl;
return 0;
}
ผลลัพธ์
Maximum value = 8