Submission #1312736

#TimeUsernameProblemLanguageResultExecution timeMemory
1312736neonglitchXOR Sum (info1cup17_xorsum)C++20
0 / 100
1694 ms7992 KiB
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
using namespace std;
typedef long long ll;
int main()
{
	int t=1;
	// cin>>t;
	while(t--)
	{
		int n;
		cin>>n;
		int a[n],c[n];
		for(int i=0;i<n;i++)
		{
			cin>>a[i];
		}
		int pw=1,fnl=0;
		for(int j=0;j<21;j++)
		{
			pw*=2;
			for(int i=0;i<n;i++)c[i]=a[i]%pw;
			sort(c,c+n);
			// we want sum to be [pw/2 , pw-1]
			int on=0;
			for(int i=0;i<n;i++)
			{
			
				for(int k=i;k<=i;k++)
				{
					// maximum 
					int sx=(c[i]+c[k]);
					if((pw/2)<=sx and sx<pw)
					{
						on++;
					}
					if(pw+(pw/2)<=sx and sx<2*pw)
					{
						on++;
					}
				}
				// l <= c[i] + c[k]  < r
				// l-c[i] <= c[k]
				int l=pw/2,r=pw;
				on+=lower_bound(c,c+n,r-c[i])-lower_bound(c,c+n,l-c[i]);
				l=(l+r);
				r=(r+r);
				on+=lower_bound(c,c+n,r-c[i])-lower_bound(c,c+n,l-c[i]);
				// c[k] < r-c[i]
			}
			on/=2;
			if(on&1)fnl+=pw/2;
		}
		cout<<fnl<<endl;
	}
}
#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...