# PBinfo #2647 – SecvBiti – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

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

## Cod sursă C++

```cpp
#include <string.h>
int freq[2000002];
long long SecvBiti(char v[]) {
    int lungime = strlen(v);
    freq[lungime] = 1;
    long long int contor = 0;
    for (int i = 0 ; i < lungime; ++i)
        if (v[i] == '1') contor++ , freq[lungime + contor]++;
    else contor--, freq[lungime + contor]++;
    contor = 0;
    for (int i = 0 ; i < 2 * lungime; ++i)
        contor = contor + freq[i] * (freq[i] - 1LL) / 2;
    return contor;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/2647)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/2647/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-2647/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
