Submission #30994270


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

template <class T, int W> int sweep(vector<T>& c) {
    int n = (int)c.size(), rank = 0;
    for (int d = W - 1; d >= 0; --d) {
        int k = rank;
        while (k < n and !(c[k] >> d & 1)) {
            k += 1;
        }
        if (k < n) {
            swap(c[k], c[rank]);
            for (int i = rank + 1; i < n; ++i) {
                if (c[i] >> d & 1) {
                    c[i] ^= c[rank];
                }
            }
            rank += 1;
        }
    }
    return rank;
}

template <class T, int W> T maximize(vector<T> c, T x) {
    int n = sweep<T, W>(c);
    for (int i = 0; i < n; ++i) {
        x = max(x, x ^ c[i]);
    }
    return x;
}

constexpr int W = 30;

int main() {
    int n, k;
    cin >> n >> k;
    vector<long long> c(n);
    for (int i = 0; i < n; ++i) {
        long long a, b;
        cin >> a >> b;
        c[i] = (a << W) | b;
    }

    n = sweep<long long, 2 * W>(c);
    if ((c.back() >> W) > k) {
        cout << -1 << '\n';
        return 0; 
    }
    vector<int> a(n), b(n);
    for (int i = 0; i < n; ++i) {
        a[i] = c[i] >> W;
        b[i] = c[i] & ((1 << W) - 1);
    }
    int m = 0;
    while (m < n and a[m] > 0) {
        m += 1;
    }

    int ans = 0, fixed_a = 0, fixed_b = 0;
    for (int i = 0; i < m; ++i) {
        int msb = 1;
        while ((msb << 1) <= a[i]) {
            msb <<= 1;
        }
        if ((fixed_a | (msb - 1)) <= k) {
            ans = max(ans, maximize<int, 30>(vector<int>(b.begin() + i + 1, b.end()), fixed_b));
            fixed_a ^= a[i];
            fixed_b ^= b[i];
        } else if (((fixed_a ^ a[i]) | (msb - 1)) <= k) {
            ans = max(ans, maximize<int, 30>(vector<int>(b.begin() + i + 1, b.end()), fixed_b ^ b[i]));   
        } else {
            if (fixed_a & msb) {
                fixed_a ^= a[i];
                fixed_b ^= b[i];
            }
        }
    }
    if (fixed_a <= k) {
        ans = max(ans, maximize<int, 30>(vector<int>(b.begin() + m, b.end()), fixed_b));
    }
    cout << ans << '\n';
    return 0;
}

Submission Info

Submission Time
Task G - Xor Cards
User KoD
Language C++ (GCC 9.2.1)
Score 600
Code Size 2166 Byte
Status AC
Exec Time 7 ms
Memory 3608 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 3
AC × 45
Set Name Test Cases
Sample example_00.txt, example_01.txt, example_02.txt
All example_00.txt, example_01.txt, example_02.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt
Case Name Status Exec Time Memory
example_00.txt AC 6 ms 3560 KiB
example_01.txt AC 2 ms 3484 KiB
example_02.txt AC 3 ms 3568 KiB
test_00.txt AC 3 ms 3440 KiB
test_01.txt AC 4 ms 3608 KiB
test_02.txt AC 4 ms 3532 KiB
test_03.txt AC 3 ms 3524 KiB
test_04.txt AC 7 ms 3376 KiB
test_05.txt AC 3 ms 3572 KiB
test_06.txt AC 4 ms 3516 KiB
test_07.txt AC 2 ms 3568 KiB
test_08.txt AC 3 ms 3516 KiB
test_09.txt AC 2 ms 3464 KiB
test_10.txt AC 2 ms 3452 KiB
test_11.txt AC 2 ms 3576 KiB
test_12.txt AC 2 ms 3456 KiB
test_13.txt AC 3 ms 3572 KiB
test_14.txt AC 4 ms 3576 KiB
test_15.txt AC 4 ms 3464 KiB
test_16.txt AC 3 ms 3508 KiB
test_17.txt AC 2 ms 3388 KiB
test_18.txt AC 3 ms 3512 KiB
test_19.txt AC 2 ms 3404 KiB
test_20.txt AC 2 ms 3460 KiB
test_21.txt AC 3 ms 3568 KiB
test_22.txt AC 2 ms 3600 KiB
test_23.txt AC 2 ms 3464 KiB
test_24.txt AC 2 ms 3392 KiB
test_25.txt AC 6 ms 3512 KiB
test_26.txt AC 5 ms 3524 KiB
test_27.txt AC 3 ms 3576 KiB
test_28.txt AC 2 ms 3408 KiB
test_29.txt AC 3 ms 3572 KiB
test_30.txt AC 3 ms 3384 KiB
test_31.txt AC 2 ms 3408 KiB
test_32.txt AC 2 ms 3568 KiB
test_33.txt AC 2 ms 3388 KiB
test_34.txt AC 3 ms 3388 KiB
test_35.txt AC 2 ms 3384 KiB
test_36.txt AC 2 ms 3404 KiB
test_37.txt AC 5 ms 3472 KiB
test_38.txt AC 4 ms 3608 KiB
test_39.txt AC 4 ms 3380 KiB
test_40.txt AC 4 ms 3460 KiB
test_41.txt AC 4 ms 3464 KiB