思路

对结果进行按位贪心,因为高位如果可以为 1的话肯定无脑选,所以从高位到低位贪心

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;
}