fbpx

Problema #2647 – SecvBiti – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Să se scrie funcția cu următorul antet:

long long SecvBiti(char s[])

Funcția primește ca parametru un șir de caractere din mulțimea {'0', '1'} și returnează numărul secvențelor cu proprietatea că numărul biților de 1 din secvență este egal cu numărul biților de 0.

Restricții și precizări

  • 2 ≤ lungimea șirului ≤ 1.000.000

Exemplu

SecvBiti("1001") = 3

Explicație

Secvențele sunt: 1001, 10, 01.

Important

Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei. De asemenea, e posibil ca folosirea funcțiilor predefinite pentru șiruri de caractere să dea erori de compilare

#include <bits/stdc++.h>
int f[2000001];
long long SecvBiti(char s[])
{
    int l = strlen(s);
    f[l]=1;
    long long int cnt = 0;
    for(int i = 0 ; i < l ; ++i)
        if(s[i]=='1') cnt++ , f[l+cnt]++;
        else cnt-- , f[l+cnt]++;
    cnt=0;
    for(int i = 0 ; i < 2*l ; ++i)
        cnt = cnt + f[i] * (f[i]-1LL) / 2;
    return cnt;
}
Comentarii

S-ar putea sa iti placa