답안 #67935

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
67935 2018-08-15T14:51:45 Z ekrem XOR Sum (info1cup17_xorsum) C++
7 / 100
1600 ms 20280 KB
#include <bits/stdc++.h>
#define st first
#define nd second
#define mp make_pair
#define pb push_back
#define N 1000005
using namespace std;

typedef pair < int , int > ii;
typedef vector < int > vi;

int n, ans, a[N];
pair < int , int > b[N];

int main() {
	// freopen("in.txt", "r", stdin);
	// freopen("out.txt", "w", stdout);
	scanf("%d",&n);
	for(int i = 1; i <= n; i++){
		scanf("%d",a + i);
		b[i] = mp(a[i]%2, i);
	}
	sort(b + 1, b + n + 1);
	for(int k = 0; k <= 29; k++){
		int say = 0;
		// for(int i = 1; i <= n; i++)cout << b[i].st << " ";cout << endl;
		// int x = lower_bound(b + 1, b + n + 1, mp((1<<k) - b[1].st ,0) ) - b;
		// int y = lower_bound(b + 1, b + n + 1, mp((1<<(k+1) ) - b[1].st ,0) ) - b;
		// int z = lower_bound(b + 1, b + n + 1, mp((1<<k) + (1<<(k+1)) - b[1].st ,0) ) - b;
		// say += y - x;
		// say += n - z + 1;
		int x = n, y = n, z = n;;
		for(int i = 1; i <= n; i++){
			// while(x >= 2 and b[x - 1] >= mp((1<<k) - b[i].st ,0))x--;
			// while(y >= 2 and b[y - 1] >= mp((1<<(k+1) ) - b[i].st ,0))y--;
			// while(z >= 2 and b[z - 1] >= mp((1<<k) + (1<<(k+1)) - b[i].st ,0))z--;
			int x = lower_bound(b + i, b + n + 1, mp((1<<k) - b[i].st ,0) ) - b;
			int y = lower_bound(b + i, b + n + 1, mp((1<<(k+1) ) - b[i].st ,0) ) - b;
			int z = lower_bound(b + i, b + n + 1, mp((1<<k) + (1<<(k+1)) - b[i].st ,0) ) - b;
			say += y - x;
			say += n - z + 1;
			// printf("%d %d %d\n",x ,y ,z);
		}
		vector < ii > c;
		int ind = 0;
		for(int i = 1; i <= n; i++){
			if(a[b[i].nd ]&(1<<(k + 1)))
				c.pb(mp(b[i].st + (a[b[i].nd ]&(1<<(k + 1))) , b[i].nd));
			else
				b[++ind] = b[i];
			// b[i].st += a[b[i].nd ]&(1<<(k + 1));
		}
		for(int i = 0; i < c.size(); i++)
			b[++ind] = c[i];
		sort(b + 1, b + n + 1);
		ans += (1<<k)*(say%2);
	}
	printf("%d\n", ans);
	return 0;
}

Compilation message

xorsum.cpp: In function 'int main()':
xorsum.cpp:53:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < c.size(); i++)
                  ~~^~~~~~~~~~
xorsum.cpp:32:7: warning: unused variable 'x' [-Wunused-variable]
   int x = n, y = n, z = n;;
       ^
xorsum.cpp:32:14: warning: unused variable 'y' [-Wunused-variable]
   int x = n, y = n, z = n;;
              ^
xorsum.cpp:32:21: warning: unused variable 'z' [-Wunused-variable]
   int x = n, y = n, z = n;;
                     ^
xorsum.cpp:18:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&n);
  ~~~~~^~~~~~~~~
xorsum.cpp:20:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",a + i);
   ~~~~~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 376 KB Output is correct
2 Correct 22 ms 612 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1666 ms 20280 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1666 ms 20280 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 376 KB Output is correct
2 Correct 22 ms 612 KB Output is correct
3 Incorrect 601 ms 20280 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 376 KB Output is correct
2 Correct 22 ms 612 KB Output is correct
3 Execution timed out 1666 ms 20280 KB Time limit exceeded
4 Halted 0 ms 0 KB -