# PBinfo #1209 – TDrept – Rezolvare C++

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

## Enunț

Se consideră N puncte de coordonate întregi în sistemul de coordonate cartezian.

Cerința
Scrieţi un program care determină numărul de triunghiuri dreptunghice având vârfurile plasate în 3 dintre punctele date şi catetele respectiv paralele cu axele de coordonate.

Date de intrare
Fișierul de intrare tdrept.in conține pe prima linie numărul natural N, care reprezintă numărul de puncte. Pe următoarele N linii se află câte două numere naturale x y, separate prin spaţiu, reprezentând coordonatele carteziene ale celor N puncte (abscisa şi ordonata).

Date de ieșire
Fișierul de ieșire tdrept.out va conține o singură linie pe care va fi scris un număr natural reprezentând numărul de triunghiuri dreptunghice care respectă condiţiile din enunţ. Deoarece numărul de soluţii poate fi foarte mare, rezultatul va fi afişat modulo 666013 (adică restul împărţirii rezultatului la 666013).

Restricții și precizări

3 ≤ N ≤ 100 000
0 ≤ x, y ≤ 100 000
Cele N puncte din fişierul de intrare sunt distincte două câte două.

Exemplu:
tdrept.in

8
1 1
1 4
10 8
4 1
9 1
5 5
7 4
7 5
tdrept.out

5
Explicație
 Triunghiurile dreptunghice formate sunt:

(1,1) (1,4) (4,1)
(1,1) (9,1) (1,4) 
(5,5) (7,4) (7,5)
(1,4) (7,4) (7,5)
(1,1) (1,4) (7,4)

## Cod sursă C++

```cpp
//Emanuela Cerchez - O(n)
#include <fstream>
#define NMAX 100002
#define DMAX 100002
#define MOD 666013
using namespace std;
ifstream fin("tdrept.in");
ofstream fout("tdrept.out");
int n;
int xp[NMAX];
int yp[NMAX];
int nrx[DMAX];
int nry[DMAX];
void citire();
int numarare();
int main()
{
    citire();
    fout<<numarare()<<'\n';
    fout.close();
    return 0;
}
void citire()
{int i;
 fin>>n;
 for (i=1; i<=n; i++)
     {fin>>xp[i]>>yp[i];
	  nrx[xp[i]]++;
	  nry[yp[i]]++;
	 }
}
int numarare()
{int i, nr=0;
 for (i=1; i<=n; i++)
     nr=(nr+((long long int)(nrx[xp[i]]-1)*(nry[yp[i]]-1))%MOD)%MOD;
 return nr;
}
```

## Resurse

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