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 colectie.in
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 colectie.out
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!
Exemplu
colectie.in
10 4 3 8 9 3 8 4 2 1 1
colectie.out
2
Explicație
Î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.
#include <bits/stdc++.h> using namespace std; ifstream cin("colectie.in"); ofstream cout("colectie.out"); bitset<9000000>f; bitset<9000000>f2; int n , x , cnt; int main() { cin >> n; for(int i = 1 ; i <= n ; ++i) { cin >> x; if(f[x] == 0 && f2[x] == 0) f[x] = 1 , cnt++; else if(f[x] == 1) cnt-- , f2[x] = 1 , f[x] = 0; } cout << cnt; return 0; }