1217 C. El número de buenas subcadenas (pensamiento)

Obtendrá una cadena binaria s (recuerde que si cada carácter es 0 o 1, entonces una cadena es binaria).

 

Sea f (t) la representación decimal del número entero t, escrito en forma binaria (puede contener ceros a la izquierda). Por ejemplo, f (011) = 3, f (00101) = 5, f (00001) = 1, (10) = 2, f (000) = 0 yf (000100) = 4.

 

Si r-l + 1 = f (sl ... sr), las subcadenas sl, sl + 1, ..., sr son buenas.

 

Por ejemplo, la cadena s = 1011 tiene 5 subcadenas: s1 ... s1 = 1, s3 ... s3 = 1, s4 ... s4 = 1, s1 ... s2 = 10, s2 ... s4 = 011.

 

Su tarea es contar el número de subcadenas buenas en la cadena s.

 

Solución:

Encuentre el número de subcadenas de igual valor y longitud.

El método consiste en contar el número de ceros a la izquierda en tiempo real, y luego usar cada número como punto de partida para generar una cadena binaria en tiempo real. Si encuentra una relación de longitud pequeña y el número de ceros a la izquierda es mayor que la diferencia entre los dos, es legal.

#include <bits / stdc ++. h>
 usando el  espacio de nombres std; 
typedef largo  largo ll;
const  int maxn = 2e5 + 100 ;
cuerda s;
int main () {
     int T; 
    scanf ( " % d " , & T);
    mientras que (T-- ) { 
        cin >> s;
        int ans = 0 ;
        int pre = 0 ;
        para ( int i = 0 ; i <s.length (); i ++) {
             if (s [i] == ' 0 ' ) 
                pre ++ ;
            más {
                 int r = i;
                int cnt = 1 ;
                para ( int j = 0 ; j < 18 ; j ++ ) {
                     if (cnt <= pre + (r-i + 1 )) 
                        ans ++ ;
                    if (r == s.length () - 1 ) 
                         break ;
                    cnt = cnt * 2 + (s [++ r] - ' 0 ' ); 
                } 
                // Extensión hacia adelante, si la longitud no es suficiente, use el 0 
                inicial pre = 0 ; 
            } 
        } 
        printf ( " % d \ n " , ans) ; 
    } 
}

 

Supongo que te gusta

Origin www.cnblogs.com/zhanglichen/p/12687500.html
Recomendado
Clasificación