# PBinfo #3658 – NrTriplete – Rezolvare C++

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

## Enunț

Cerinţa
Scrieţi definiția completă a subprogramului C++ cu antetul:

int NrTriplete(int a[], int n, int S)
care are trei parametri:  


a, prin care primeşte un tablou unidimensional de numere întregi
n, numărul efectiv de elemente ale tabloului a
S, un număr întreg

Funcția returnează numărul de triplete (a[i], a[j], a[k]), unde 0 ≤ i < j < k < n și a[i] + a[j] + a[k] < S.

Restricţii şi precizări

-100.000.000 ≤ a[i] ≤ 100.000.000
-100.000.000 ≤ S ≤ 100.000.000
3 ≤ n ≤ 2000
numele subprogramului cerut este NrTriplete
elementele vectorului a sunt indexate de la zero
se poate folosi în funcție orice structură de date și orice funcție predefinită sau STL

Exemplu:
Dacă n=4, a=(1, -2, 0, 4), S=5, atunci valoarea returnată este 3, tripletele cu suma strict mai mică decât 5 fiind (1,-2,0), (1,-2,4), (-2,0,4).

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
int NrTriplete(int a[], int n, int S)
{
    int cnt = 0, i, j, k;
    sort(a, a + n);
    for (i = 1; i < n - 1; i++)
    {
        j = i - 1;
        for (k = i + 1; k < n && j >= 0; k++)
        {
            while (j >= 0 && a[j] + a[i] + a[k] >= S)
                j--;
            cnt += (j + 1);
        }
    }
    return cnt;
}
```

## Resurse

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