Submission #1184044

#TimeUsernameProblemLanguageResultExecution timeMemory
1184044petezaXOR Sum (info1cup17_xorsum)C++20
45 / 100
1695 ms32132 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

ll n, arr[1000005], newarr[1000005];
ll res = 0;

int main() {
    cin.tie(0) -> sync_with_stdio(0);
    cin >> n;
    for(int i=0;i<n;i++) {
        cin >> arr[i];
        newarr[i] = arr[i];
    }
    for(int k=0;k<32;k++) {
        int cres = 0;
        int odc = 0, evc = 0;
        for(int i=0;i<n;i++) {
            if(newarr[i] & 1) odc++;
            else evc++;
        }
        cres = (odc & 1) * (evc & 1);
        if(k) {
            long long cnt = 0;
            vector<ll> cvec;
            for(int i=0;i<n;i++) {
                cvec.emplace_back(arr[i] & ((1ll << (k)) - 1));
                if(((arr[i] & ((1ll << k) - 1)) << 1) >= (1ll << k)) cnt++;
            }
            sort(cvec.begin(), cvec.end());
            //for(auto &e:cvec) cout << e << ' '; 
            for(int i=0;i<n;i++) {
                auto it = cvec.end() - lower_bound(cvec.begin(), cvec.end(), (1ll << k) - (arr[i] & ((1ll << (k)) - 1)));
                cnt += it;
            }
            //cout << cnt << '\n';
            cnt /= 2;
            cnt &= 1;
            cres ^= cnt;
        }
        if(cres) res ^= (1ll << k);
        for(int i=0;i<n;i++) newarr[i] >>= 1;
    }
    cout << res;
}
#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...