1209 - T Drept
Enunț[edit | edit source]
Se consideră N puncte de coordonate întregi în sistemul de coordonate cartezian.
Cerința[edit | edit source]
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[edit | edit source]
Fișierul de intrare tdreptin.txt 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[edit | edit source]
Fișierul de ieșire tdreptout.txt 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[edit | edit source]
- 3 ⩽ N ⩽ 100.000
- 0 ⩽ x, y ⩽ 100.000
- Cele N puncte din fişierul de intrare sunt distincte două câte două.
Exemplul 1[edit | edit source]
- Intrare
- tdreptin.txt
- 8
- 1 1
- 1 4
- 10 8
- 4 1
- 9 1
- 5 5
- 7 4
- 7 5
- Ieșire
- Datele de intrare corespund restricțiilor impuse
- tdreptout.txt
- 5
Explicație[edit | edit source]
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)
Exemplul 2[edit | edit source]
- Intrare
- tdreptin.txt
- 2
- 1 1
- 1 4
- Ieșire
- Datele de intrare NU corespund restricțiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 1209 - TDrept
def validare_date(x, y):
return 3 <= len(x) <= 100000 and all(0 <= xi <= 100000 and 0 <= yi <= 100000 for xi, yi in zip(x, y))
def numar_triunghiuri_dreptunghice(x, y):
n = len(x) rezultat = 0
for i in range(n): for j in range(i + 1, n): for k in range(j + 1, n): if (x[i] == x[j] or x[j] == x[k] or x[i] == x[k]) and \ (y[i] == y[j] or y[j] == y[k] or y[i] == y[k]): rezultat += 1 return rezultat % 666013
def citire_date():
with open("tdreptin.txt", "r") as f: n = int(f.readline().strip()) x = [] y = [] for _ in range(n): xi, yi = map(int, f.readline().split()) x.append(xi) y.append(yi) return n, x, y
def scrie_rezultat(rezultat):
with open("tdreptout.txt", "w") as f: f.write(str(rezultat))
if __name__ == "__main__":
n, x, y = citire_date()
if validare_date(x, y): print("Datele de intrare corespund restricțiilor impuse") rezultat = numar_triunghiuri_dreptunghice(x, y) scrie_rezultat(rezultat) else: print("Datele de intrare NU corespund restricțiilor impuse") exit(0)
</syntaxhighlight>