Submission #128638

#TimeUsernameProblemLanguageResultExecution timeMemory
128638E869120XOR Sum (info1cup17_xorsum)C++14
45 / 100
1660 ms20548 KiB
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#pragma warning (disable: 4996)

int N, A[1 << 20];

int solve(int bit) {
	vector<int> vec; long long sum = 0;
	for (int i = 1; i <= N; i++) {
		vec.push_back(A[i] % (2 << bit));
		vec.push_back((A[i] % (2 << bit)) + (2 << bit));
	}
	sort(vec.begin(), vec.end());

	for (int i = 1; i <= N; i++) {
		int F = (3 << bit) - (A[i] % (2 << bit)); F %= (2 << bit);
		int pos1 = lower_bound(vec.begin(), vec.end(), F) - vec.begin();
		int pos2 = lower_bound(vec.begin(), vec.end(), F + (1 << bit)) - vec.begin();
		sum += 1LL * (pos2 - pos1);
	}
	
	long long sum2 = 0;
	for (int i = 1; i <= N; i++) {
		if ((A[i] + A[i]) % (2 << bit) >= (1 << bit)) sum2++;
	}

	return (sum2 + (sum - sum2) / 2LL) % 2LL;
}

int main() {
	scanf("%d", &N); int maxn = 0;
	for (int i = 1; i <= N; i++) { scanf("%d", &A[i]); maxn = max(maxn, A[i]); }

	int P = 0; for (int i = 0; i <= 30; i++) { if ((1 << i) <= maxn) P = i; }

	int ans = 0;
	for (int i = 0; i <= P + 1; i++) {
		int t = solve(i);
		if (t == 1) ans += (1 << i);
	}
	printf("%d\n", ans);
	return 0;
}

Compilation message (stderr)

xorsum.cpp:5:0: warning: ignoring #pragma warning  [-Wunknown-pragmas]
 #pragma warning (disable: 4996)
 
xorsum.cpp: In function 'int main()':
xorsum.cpp:33:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &N); int maxn = 0;
  ~~~~~^~~~~~~~~~
xorsum.cpp:34:38: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for (int i = 1; i <= N; i++) { scanf("%d", &A[i]); maxn = max(maxn, A[i]); }
                                 ~~~~~^~~~~~~~~~~~~
#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...