Bài toán
Cho mảng n số nguyên dương, tìm cặp (a,b) cho a & b (bitwise AND) lớn nhất.
Ví dụ
arr = {4,8,12,16} → cặp (8,12), max AND = 8
arr = {4,8,16,2} → không có cặp AND > 0
Thuật toán tối ưu (bit manipulation)
- Duyệt bit từ 31 xuống 0
- Thử set bit này vào kết quả res
- Đếm số phần tử có (arr[i] & pattern) == pattern
- Nếu ≥2 phần tử → giữ bit này trong res
- Cuối: tìm 2 phần tử thỏa mãn (arr[i] & res) == res
Mã nguồn C
#include <stdio.h>
int checkBit(int pattern, int arr[], int n) {
int cnt=0;
for(int i=0;i=0; bit--) {
int cnt = checkBit(res | (1<= 2) res |= (1<
Kết quả
Pair: 8 9
Max AND = 8