1388 - Colectie
Cerinţa[edit | edit source]
Dudu este un colecționar înrăit de vederi. În decursul anilor, a reușit să colecționeze un număr n de vederi. Pentru a-i fi mai ușor să le identifice, el le-a atribuit fiecărei vederi câte un număr (de la 1 la n).
Într-o zi, Dudu a constatat faptul că prin colecția sa se află vederi care se repetă (sunt marcate cu același număr). Fiind, un colecționar care se respectă, el dorește să păstreze doar acele vederi care sunt unice în colecția sa (prin „unic” înțelegem o vedere al cărei număr atribuit este unic).„Ajută-mă, te rog!”, spune Dudu. El vă cere să aflați care este numărul de vederi unice din colecția sa.
Date de intrare[edit | edit source]
Fișierul de intrare colectiein.txt conține pe prima linie numărul n, iar pe a doua linie n numere naturale separate prin spații.
Date de ieșire[edit | edit source]
Fișierul de ieșire colectieout.txt va conține pe prima linie numărul de vederi unice care se află în colecția sa.
Restricţii şi precizări[edit | edit source]
- 1 ≤ n ≤ 9.000.000
- numerele de pe a doua linie a fișierului de intrare vor fi mai mici sau egale cu n
- Dudu vă mulțumește din suflet pentru ajutorul oferit!
Exemplul 1[edit | edit source]
- colectiein.txt
10 4 3 8 9 3 8 4 2 1 1
- colectieout.txt
2
Exemplul 2[edit | edit source]
- colectiein.txt
0 1 2 3
- colectieout.txt
Datele de intrare nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> def unique_views(n, views):
if 1 <= n <= 9000000 and all(1 <= view <= n for view in views): view_counts = [0] * (n + 1) for view in views: view_counts[view] += 1 return view_counts.count(1) else: return None
with open('colectiein.txt', 'r') as fin:
n = int(fin.readline()) views = list(map(int, fin.readline().split()))
result = unique_views(n, views)
if result is not None:
print("Datele de intrare corespund restrictiilor impuse") with open('colectieout.txt', 'w') as fout: fout.write(str(result))
else:
print("Datele de intrare nu corespund restrictiilor impuse")
</syntaxhighlight>
Explicatie[edit | edit source]
În colecția lui Dudu se află vederi marcate cu numerele : 1, 2, 3, 4, 8, 9. Dintre aceste vederi, doar cele marcate cu numerele 2, 9 sunt unice.