# PBinfo #661 – Triunghiuri1 – Rezolvare C++

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

## Enunț

Cerința
Se dau n numere naturale distincte. Determinaţi câte triunghiuri distincte pot avea lungimile laturilor printre aceste numere.

Date de intrare
Programul citește de la tastatură numărul n, iar apoi cele n numere naturale.

Date de ieșire
Programul va afișa pe ecran numărul C, reprezentând numărul de triunghiuri determinate.

Restricții și precizări

1 ≤ n ≤ 1000
cele n numere citite vor fi mai mici decât 1.000.000
dacă ați rezolvat probleme  #Triunghiuri , ați văzut deja că aici n este mai mare

Exemplu:
Intrare

5
3 5 10 7 6 
Ieșire

7
Explicație
Cele 7 triunghiuri au lungimile laturilor:
3 5 7
3 5 6
3 7 6
5 7 6
5 10 7
5 10 6
10 7 6

## Cod sursă C++

```cpp
#include <iostream>
using namespace std;
int n, a[1005];
int main()
{
	cin >> n;
	for(int i = 1 ; i <= n ; ++i)
		cin >> a[i];
	int cnt = 0;
	for(int i = 1 ; i < n ; ++i)
		for(int j = i + 1 ; j <= n ; j ++)
			if(a[i] > a[j])
			{
				int aux = a[i];
				a[i] = a[j];
				a[j] = aux;
			}
	for(int i = 1 ; i <= n - 2  ; ++i)
		for(int j = i + 1 ; j <= n - 1; j ++)
		{
			//caut cel mai din dreapta k astfel incat a[i] + a[j] > a[k]
			int st = j + 1, dr = n , k = n;
			while(st <= dr)
			{
				k = (st + dr) / 2;
				if(a[i] + a[j] > a[k])
					st = k + 1;
				else
					dr = k - 1;
			}
				cnt += dr - j;
		}
	cout << cnt << endl;
	return 0;
}
```

## Resurse

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