fork download
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. using int64 = long long;
  6.  
  7. int main() {
  8. ios::sync_with_stdio(false);
  9. cin.tie(nullptr);
  10.  
  11. int64 testCases;
  12. cin >> testCases;
  13.  
  14. while (testCases--) {
  15. int64 size;
  16. cin >> size;
  17.  
  18. vector<int64> nums(size);
  19. for (int64 i = 0; i < size; i++) cin >> nums[i];
  20.  
  21. int64 invalidCount = 0;
  22.  
  23. for (int64 start = 0; start < size; start++) {
  24. for (int64 end = start; end < size; end++) {
  25. int64 totalXor = 0;
  26.  
  27. for (int64 idx = start; idx <= end; idx++) {
  28. totalXor ^= nums[idx];
  29. }
  30.  
  31. if (totalXor == 0) {
  32. int64 prefixXor = 0;
  33. int64 zeroPrefixCount = 0;
  34. for (int64 pos = start; pos <= end; pos++) {
  35. prefixXor ^= nums[pos];
  36. if (prefixXor == 0) zeroPrefixCount++;
  37. }
  38. invalidCount += zeroPrefixCount;
  39. }
  40. }
  41. }
  42.  
  43. int64 totalSubseqs = (size * (size + 1) * (size + 2)) / 6;
  44. int64 result = totalSubseqs - invalidCount;
  45.  
  46. cout << result << "\n";
  47. }
  48.  
  49. return 0;
  50. }
  51.  
Success #stdin #stdout 0.01s 5284KB
stdin
4
2
0 0
3
1 1 1
3
1 2 3
7
0 1 0 2 0 3 0
stdout
0
8
9
72