思路
对结果进行按位贪心,因为高位如果可以为 的话肯定无脑选,所以从高位到低位贪心
Code
void solve()
{
cin >> n >> k;
vi v(n), w(n);
for (int i = 0; i < n; i++)
{
cin >> v[i] >> w[i];
}
int ans = 0;
for (int j = 30; j >= 0; j--)
{
int now = -1;
int cnt = 0;
int num = (ans | (1 << j));
for (int i = 0; i < n; i++)
{
if ((w[i] & num) == num)
{
if (cnt == 0)
{
now = v[i];
}
else
{
now &= v[i];
}
cnt++;
}
}
if (cnt > 0 && now <= k)
{
ans = num;
}
}
cout << ans << endl;
}

京公网安备 11010502036488号