# PBinfo #4205 – SecvSumS – Rezolvare C++

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

## Enunț

Cerința
Scrieți funcția care are antetul:

int SecvSumS(vector<int> &a, int s)
Funcția va returna lungimea minimă a unei secvențe nevide din a care are suma egală cu s. Dacă nu există nicio secvență de sumă s funcția va returna valoarea -1.

Restricții și precizări

a conține cel puțin un element și cel mult 200.000
elementele vectorului sunt numere întregi din intervalul [-5.000, 5.000]
-1.000.000.000 ≤ s ≤ 1.000.000.000
Puteți utiliza în rezolvare orice structură de date

Exemplu:
Dacă a = (3,-2, 2, 1, 6, -3, 7, -11) și s = 10, atunci funcția va returna valoarea 3, secvența de lungime minimă fiind (6, -3, 7). Și dacă a = (-2, -3, 4, -1) și s = 6 atunci funcția va returna valoarea -1.

Important
Soluţia propusă va conţine doar funcţia cerută. Prezenţa în soluţie a altor instrucţiuni poate duce la erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

## Cod sursă C++

```cpp
int SecvSumS(vector<int> &a, int s)
{
    int suma, i, n, len;
    unordered_map<int, int> M;
    n = a.size();
    M[0] = 0;
    len = n + 1;
    suma = 0;
    for(int i = 0; i < n; i++)
    {
        suma += a[i];
        if(M.find(suma - s) != M.end())
            len = min(len, i - M[suma - s] + 1);
        M[suma] = i + 1;
    }
    if (len == n + 1) len = -1;
    return len;
}
```

## Resurse

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