Submission #1308446

#TimeUsernameProblemLanguageResultExecution timeMemory
1308446mxhrvsXOR Sum (info1cup17_xorsum)C++20
0 / 100
1695 ms8264 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n;
    cin >> n;

    vector<int> v(n);
    for (int i = 0; i < n; ++i) {
        cin >> v[i];
    }

    long long ans = 0;

    for (int k = 0; k < 28; ++k) {
        int mod = 1 << (k + 1);
        int lower_bound_bit = 1 << k;

        vector<int> current_bits(n);
        for (int i = 0; i < n; ++i) {
            current_bits[i] = v[i] % mod;
        }
        sort(current_bits.begin(), current_bits.end());

        long long count = 0;
        for (int i = 0; i < n; ++i) {
            int x = current_bits[i];

            int l1 = lower_bound_bit - x;
            int r1 = (2 * lower_bound_bit) - 1 - x;
            count += lower_bound(current_bits.begin() + i, current_bits.end(), r1 + 1) - 
                     lower_bound(current_bits.begin() + i, current_bits.end(), l1);
            
            int l2 = (3 * lower_bound_bit) - x;
            int r2 = (4 * lower_bound_bit) - 1 - x;
            count += lower_bound(current_bits.begin() + i, current_bits.end(), r2 + 1) - 
                     lower_bound(current_bits.begin() + i, current_bits.end(), l2);
        }

        if (count % 2 == 1) {
            ans |= (1LL << k);
        }
    }

    cout << ans << endl;

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...