1 条题解

  • 0
    @ 2026-9-17 15:35:24

    #include <bits/stdc++.h>

    using namespace std;

    pair<string, int> a[100005];

    int n, m;

    int calc(int bit, int now) {

    for (int i = 1; i <= n; i++) {

    int x = a[i].second >> bit & 1;
    	
    if (a[i].first == "AND") now &= x;
    	
    else if (a[i].first == "OR") now |= x;
    	
    else now ^= x;
    

    }

    return now;

    }

    int main() {

    cin >> n >> m;

    for (int i = 1; i <= n; i++)

    cin >> a[i].first >> a[i].second;
    

    int val = 0, ans = 0;

    for (int bit = 29 ; bit >= 0 ; bit--) {

    int res0 = calc(bit, 0);
    	
    int res1 = calc(bit, 1);
    
    if (val + (1 << bit) <= m && res0 < res1)
    		
      val += 1 << bit, ans += res1 << bit;
    	
    else ans += res0 << bit;
    

    }

    cout << ans;

    return 0;

    }

    信息

    ID
    6212
    时间
    1000ms
    内存
    125MiB
    难度
    6
    标签
    递交数
    69
    已通过
    40
    上传者