题目大意:
求 \(\max\{a_i\&a_j\}\quad(i,j\in \{1\cdots n\})\)。
正文:
在位运算中,高位的数若选了得到的数肯定更大,那就将数列从大到小排序,比较相邻的两数就行了。
代码:
int main()
{
scanf ("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%lld", &a[i]);
sort (a + 1, a + 1 + n, cmp);
for (int i = 1; i < n; i++)
{
if((a[i + 1] & a[i]) >= ans)
ans = (a[i + 1] & a[i]);
else break;
}
printf("%lld", ans);
return 0;
}