título Descripción
Dada una matriz de tamaño N A, el elemento Ai i-ésimo.
Pregunté cuántos de los [LR] sub-intervalo, para cumplir con el intervalo de valores e intervalos iguales XOR y valores, a saber:
Al xor Al + 1 xor ... xor Ar = Al + Al + 1 + ... + Ar (l + 1 representa un subíndice)
un xor b, y a y b es el número XOR bit a bit decimal binario para obtener una nueva representación c
xor 5 y 12 se calcula como sigue:
510 = 01012
(12) 10 = (1,100) 2
01012xor11002 = (1,001) 2
(1001) 2 = (9) 10
entrada
La primera línea de un N. entero dado
La segunda fila con un determinado enteros n, es la i-ésima Ai.
^. 5 × 10 ≦ N ≦ 2
0≤A_i≤2 ^ 30
exportación
El número de sub-intervalos para satisfacer las condiciones de salida LR.
entrada de la muestra
10 0 0 740 361 473 0 0 826 479 974
Ejemplo de salida
18
solución:
xor operación se puede considerar como no llevar adición binaria, es la adición de sí mismo para llevar sumador.
Usted puede simplemente venir a estas propiedades: Para la gama, si XOR y además responden lo mismo, entonces la respuesta es, sin duda sigue siendo el mismo rango estrecho, y si XOR y la adición de la pregunta no es lo mismo, entonces la respuesta es, sin duda ampliar la gama no es lo mismo .
Así podemos enumerar el intervalo de puntos de la derecha, para encontrar el más pequeño de la izquierda punto, este intervalo es igual o diferentes intervalos y luego en este momento el número de intervalo de legítima rango es el intervalo de la longitud correcta (dentro de la reducción de puntos de izquierda son legítimas ).
Este prefijo también puede ser pretratada y el prefijo y XOR, manteniéndola con el doble puntero.
1 #include <iostream> 2 #include <algoritmo> 3 #include <stdio.h> 4 #include < string .h> 5 #include < string > 6 #include <cola> 7 #include <stdlib.h> 8 # incluir <math.h> 9 #define por (i, a, b) for (int i = a; i <= b; ++ i) 10 #define rep (i, a, b) for (int i = a ; i> = b; - i) 11 #define inf 0xf3f3f3f 12 #define ll largo long int 13 usando espacio de nombres std; 14 int p [200 005 ]; 15 int s [ 200005 ]; 16 int z [ 200,005 ]; 17 int main () 18 { 19 int m, a; 20 cin >> m; 21 z [ 0 ] = 0 ; s [ 0 ] = 0 ; 22 por (i, 1 , m) 23 { 24 cin >> a; 25 s [i] = s [i- 1 ] + a; 26 z [i] = z [i- 1] ^ A; 27 } 28 ll l = 0 , suma = 0 ; 29 por (i, 1 , m) 30 { 31 mientras que ((z [i] ^ z [l]) = (s [i] -s [l])!) L ++ ; 32 suma + = i- l; 33 } 34 cout << suma; 35 de retorno 0 ; 36 }
-