Submission #1316216

#TimeUsernameProblemLanguageResultExecution timeMemory
1316216PetrixXOR Sum (info1cup17_xorsum)C++20
100 / 100
810 ms24092 KiB
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

#define int long long
vector<int> v,v1,v2;

int solve(int a){
	int aux=v.size(),rasp=0,i;
	for(i=0;i<v.size();i++){
		aux=max(aux,i);
		while(aux>i && v[i]+v[aux-1]>=a) aux--;
		rasp^=(aux-i)%2;
	}
	return rasp;
}

signed main()
{
	int n,rasp=0,a,i,cnt1,cnt2,cnt;
	cin>>n;
	for(i=0;i<n;i++){
		cin>>a;
		v.push_back(a);
	}
	sort(v.begin(),v.end());
	for(i=(1<<29);i;i/=2){
        v1.clear();v2.clear();
		for(int j:v){
			if(j<2*i) v1.push_back(j);
			else v2.push_back(j-2*i);
		}
		v.clear();
        cnt1=cnt2=0;
        while(cnt1<v1.size() && cnt2<v2.size()){
            if(v1[cnt1]<=v2[cnt2]){
                v.push_back(v1[cnt1]);cnt1++;
            }else{
                v.push_back(v2[cnt2]);cnt2++;
            }
        }
        while(cnt1<v1.size()){
            v.push_back(v1[cnt1]);cnt1++;
        }
        while(cnt2<v2.size()){
            v.push_back(v2[cnt2]);cnt2++;
        }
		cnt=(solve(4*i)^solve(3*i)^solve(2*i)^solve(i));
		rasp+=i*cnt;
	}
	cout<<rasp;
}
#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...