1388 - Colectie

De la Universitas MediaWiki

Cerinţa

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

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

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

  • 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

colectiein.txt
10
4 3 8 9 3 8 4 2 1 1 
colectieout.txt
2

Exemplul 2

colectiein.txt
0
1 2 3 
colectieout.txt
Datele de intrare nu corespund restrictiilor impuse

Rezolvare

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")

Explicatie

Î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.