Submission #720349

#TimeUsernameProblemLanguageResultExecution timeMemory
720349GrandTiger1729XOR Sum (info1cup17_xorsum)C++17
45 / 100
1658 ms12768 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 30;
int main(){
    cin.tie(0)->sync_with_stdio(0);
    int n; cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; i++)
        cin >> a[i];
    int ans = 0;
    for (int j = 0; j < N; j++){
        long long cnt = 0;
        for (int i = 0; i < n; i++){
            if (a[i] & 1 << j)
                cnt += n + 1;
        }
        ans ^= (cnt & 1) << j;
    }
    for (int j = 1; j <= N; j++){
        vector<int> b(n);
        transform(a.begin(), a.end(), b.begin(), [&](int x){
            return x % (1 << j);
        });
        sort(b.begin(), b.end());
        long long cnt = 0;
        for (int i = 0; i < n; i++){
            cnt += b.end() - lower_bound(b.begin(), b.end(), (1 << j) - b[i]);
            cnt += b[i] >= (1 << j - 1);
        }
        cnt /= 2;
        ans ^= (cnt & 1) << j;
    }
    cout << ans << '\n';
    return 0;
}

Compilation message (stderr)

xorsum.cpp: In function 'int main()':
xorsum.cpp:29:36: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   29 |             cnt += b[i] >= (1 << j - 1);
      |                                  ~~^~~
#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...