题目描述
作为白玉楼的庭师,妖梦虽然不会n刀流,但是却领悟了生命二刀流。然而我也是个剑的收藏者,家里屯着n把剑,每一把剑都有一个灵魂值a[i],由于一些剑之间可能有共鸣,所以我需要两把契合度最高的剑。据妖梦所说,两把编号为i,j剑的契合度为a[i] and a[j]。如何深得剑的灵魂呢?(即求最大值)
输入
第一行一个整数n,代表藏剑数。
第二行n个整数,第i个整数表示a[i]。输出
输出包含一个正整数,最好的两把剑的契合度。
贪心 注意到,按照二进制从高位到低位枚举,
保证之前的位可以取到,若当前位有超过两个,则
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int n;
ll arr[1000010];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
ll ans = 0, temp;
cin >> n;
for (int i = 1; i <= n; ++i)
{
cin >> arr[i];
}
for (int i = 30; i >= 0; --i)
{
temp = 1ll<<i;
t = 0;
for (int j = 1; j <= n; ++j)
{
if (((ans & arr[j]) == ans) && ((temp & arr[j]) == temp))
{
t++;
}
if (t == 2) break;
}
if (t == 2)
{
ans += temp;
}
}
cout << ans << endl;
return 0;
}