fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6.  
  7. int count(vector<int> &a, int l, int r) {
  8. return upper_bound(a.begin(), a.end(), r) - upper_bound(a.begin(), a.end(), l-1);
  9. }
  10.  
  11. int main () {
  12. int n;
  13. scanf("%d", &n);
  14.  
  15. vector<int> a(n), b(n);
  16. for(int i = 0; i < n; ++i)
  17. scanf("%d", &a[i]);
  18. for(int i = 0; i < n; ++i)
  19. scanf("%d", &b[i]);
  20.  
  21. int ans = 0;
  22. for(int bit = 20; bit >= 0; --bit) {
  23. int T = 1 << bit;
  24. for(int i = 0; i < n; ++i) {
  25. a[i] %= 2*T;
  26. b[i] %= 2*T;
  27. }
  28.  
  29. sort(b.begin(), b.end());
  30.  
  31. ll cnt = 0;
  32.  
  33.  
  34.  
  35. for(int i = 0; i < n; ++i) {
  36.  
  37. /// ta biết a[i]
  38.  
  39. /// đếm coi bao nhiêu số b[j] thỏa mãn
  40.  
  41. /// TH1 : min a + b = 10000 và max = 11111
  42.  
  43. /// ta đã biết a = bao nhiều
  44.  
  45. /// b = [10000 - a, 11111 - a]
  46.  
  47. cnt += count(b, T - a[i], 2*T - a[i] - 1);
  48.  
  49. /// ở trên đã đếm được số cặp a + b nằm trong khoảng
  50.  
  51. /// [10000, 11111]
  52.  
  53.  
  54.  
  55.  
  56. cnt += count(b, 3*T - a[i], 4*T - a[i] - 1);
  57. }
  58. if (cnt % 2 == 1)
  59. ans += T;
  60. }
  61.  
  62. printf("%d", ans);
  63.  
  64. return 0;
  65. }
  66.  
Success #stdin #stdout 0.02s 5316KB
stdin
Standard input is empty
stdout
Standard output is empty