# PBinfo #4240 – NrSecv01 – Rezolvare C++

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

## Enunț

Cerința
Scrieți funcția cu următorul antet:

long long NrSecv01(const char s[])
Funcția primește ca parametru un șir format doar din 0 și 1 și returnează numărul se secvențe care conțin exact un caracter 1.

Exemplu
NrSecv01("0101") = 6, secvențele care conțin exact un 1 fiind: 01, 010, 1, 10, 01, 1.

Restricții și precizări

Lungimea șirului s va fi de cel mult 200.000.
Puteți utiliza funcțiile pentru șirurile de caractere din biblioteca cstring

Important
Soluţia propusă va conţine doar definiţia subprogramului cerut. 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.

## Cod sursă C++

```cpp
long long NrSecv01(const char s[])
{
    long long cnt = 0;
    int fr[200001] = {0};
    int i, sum = 0;
    fr[0] = 1;
    for (i = 0; s[i] != 0; i++)
    {
        if (s[i] == '1') sum++;
        if (sum > 0) cnt += fr[sum - 1];
        fr[sum]++;
    }
    return cnt;
}
```

## Resurse

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