NC14247 Xorto (XOR + suma de prefijo)

Para el problema de XOR, muchos de ellos se unen con el prefijo y, por ejemplo, esta pregunta le permite encontrar el número de valores XOR que son iguales en el intervalo disjunto

Es fácil pensar en usar prefijos y expresar intervalos, ahora considere cómo no intersectarse y no repetir cálculos

1. Ciclo bidimensional, la primera dimensión comienza desde 1, la segunda dimensión se usa para estadísticas y una para actualizar

En las estadísticas, de i a n, los valores XOR de todos los intervalos en esta sección se verifican para ver si son iguales antes, y luego se calculan

Al actualizar, desde 1-i, agregue todos los valores de intervalo anteriores

De esta manera, no será pesado

#include <iostream> 
#include <map> 
#include < string > 
#include <cstring> 
#include <algorithm>
 usando el  espacio de nombres std;
typedef largo  largo ll;
const  int N = 5e5 + 10 ;
int s [N];
int a [N];
int cnt [N];
int main () {
     int n;
    cin >> n;
    int i;
    para (i = 1 ; i <= n; i ++ ) {
        cin >> a [i];
        s [i] = s [i- 1 ] ^ a [i];
    }
    ll res = 0 ;
    para (i = 1 ; i <= n; i ++ ) {
         int j;
        para (j = i; j <= n; j ++ ) {
            res + = cnt [s [j] ^ s [i- 1 ]];
        }
        para (j = 1 ; j <= i; j ++ ) {
            cnt [s [i] ^ s [j- 1 ]] ++ ;
        }
    }
    cout << res << endl;
}
Ver código

 

Supongo que te gusta

Origin www.cnblogs.com/ctyakwf/p/12679532.html
Recomendado
Clasificación