Tuyên bố vấn đề
Cho một phạm vi [L, R], nhiệm vụ là tìm một cặp (X, Y) sao cho L ≤ X
Nếu L =1 và R =10 thì giá trị AND theo chiều bit tối đa là 8 có thể được hình thành như sau -
Lặp lại từ L đến R và kiểm tra bitwise AND cho mọi cặp có thể và in giá trị lớn nhất ở cuối
Bây giờ chúng ta hãy xem một ví dụ - Ví dụ
1000 # Binary representation of 8
Bitwise AND
1001 # Binary representation of 9
----
1000 # Final result
Thuật toán
Ví dụ
#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;
}
Đầu ra
Maximum value = 8