2 条题解

  • 0
    @ 2026-3-12 20:21:55
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int MAXK = 105;
    
    int k;
    ll a[MAXK];
    ll basis[65];  // 线性基
    
    bool insert(ll x) {
        for (int i = 63; i >= 0; i--) {
            if (!(x >> i)) continue;
            if (!basis[i]) {
                basis[i] = x;
                return true;
            }
            x ^= basis[i];
        }
        return false;
    }
    
    int main() {
        scanf("%d", &k);
        ll sum = 0;
        for (int i = 0; i < k; i++) {
            scanf("%lld", &a[i]);
            sum += a[i];
        }
        
        // 从大到小排序
        sort(a, a + k, greater<ll>());
        
        ll ans = 0;
        for (int i = 0; i < k; i++) {
            if (!insert(a[i])) {
                ans += a[i];  // 不能插入线性基,即可以拿走
            }
        }
        
        printf("%lld\n", ans);
        return 0;
    }
    

    信息

    ID
    140
    时间
    1000ms
    内存
    128MiB
    难度
    8
    标签
    递交数
    22
    已通过
    5
    上传者