2217 - Map: Difference between revisions
Pagină nouă: Domnul Map vă pune la dispoziție un șir a[1], a[2], …, a[n] de numere naturale. Cerința Pentru fiecare a[i] (i=1..n) trebuie să spuneți de câte ori apare acest element în secvența a[1], a[2], …, a[i]. Date de intrare Fișierul de intrare map.in conține pe prima linie numărul n. Pe linia a doua, separate prin câte un spațiu, sunt elementele șirului. Date de ieșire În fișierul de ieșire map.out se vor afișa pe primul rând n numere naturale, al i-lea n... |
No edit summary |
||
Line 1: | Line 1: | ||
Domnul Map vă pune la dispoziție un șir a[1], a[2], …, a[n] de numere naturale. | Domnul Map vă pune la dispoziție un șir '''a[1]''', '''a[2]''', '''…, a[n]''' de numere naturale. | ||
Cerința | ==Cerința== | ||
Pentru fiecare '''a[i] (i=1..n)''' trebuie să spuneți de câte ori apare acest element în secvența '''a[1], a[2], …, a[i].''' | |||
Date de | ==Date de intrare== | ||
Fișierul de intrare '''mapin.txt''' conține pe prima linie numărul '''n'''. Pe linia a doua, separate prin câte un spațiu, sunt elementele șirului. | |||
==Date de ieșire== | |||
1 1 2 1 2 2 3 | În fișierul de ieșire '''mapout.txt''' se vor afișa pe primul rând '''n''' numere naturale, al '''i'''-lea număr reprezentând numărul de apariții ale lui '''a[i]''' în secvența '''a[1], a[2], …, a[i].''' | ||
Explicație | |||
Primul element este 1. Apare o singură dată până acum. | ==Restricții și precizări== | ||
Al doilea element este 9876543210. Și el apare pentru prima dată. | |||
Al treilea element este 1. Apare a doua oară. | *'''1 ≤ n ≤ 200 000''' | ||
Al patrulea element este 3. Apare prima oară. | *'''0 <= a[i] <= 1018''' | ||
Al cincilea element este 3. Apare a doua oară. | |||
Al șaselea element este 9876543210. Apare a doua oară. | ==Exemplul 1:== | ||
Al șaptelea element este 9876543210. Apare a treia oară. | |||
'''mapin.txt''' | |||
7 | |||
1 9876543210 1 3 3 9876543210 9876543210 | |||
'''mapout.txt''' | |||
Datele de intrare corespund restrictiilor impuse | |||
1 1 2 1 2 2 3 | |||
==Exemplul 2:== | |||
'''mapin.txt''' | |||
map | |||
'''mapout.txt''' | |||
Datele de intrare nu corespund restrictiilor impuse | |||
==Explicație== | |||
Primul element este '''1'''. Apare o singură dată până acum. | |||
Al doilea element este '''9876543210'''. Și el apare pentru prima dată. | |||
Al treilea element este '''1'''. Apare a doua oară. | |||
Al patrulea element este '''3'''. Apare prima oară. | |||
Al cincilea element este '''3'''. Apare a doua oară. | |||
Al șaselea element este '''9876543210'''. Apare a doua oară. | |||
Al șaptelea element este '''9876543210'''. Apare a treia oară. | |||
==Rezolvare== | |||
<syntaxhighlight lang="python" line="1" start="1"> | |||
from collections import defaultdict | from collections import defaultdict | ||
Line 77: | Line 101: | ||
file_in.close() | file_in.close() | ||
file_out.close() | file_out.close() | ||
</syntaxhighlight> |
Latest revision as of 20:31, 3 January 2024
Domnul Map vă pune la dispoziție un șir a[1], a[2], …, a[n] de numere naturale.
Cerința[edit | edit source]
Pentru fiecare a[i] (i=1..n) trebuie să spuneți de câte ori apare acest element în secvența a[1], a[2], …, a[i].
Date de intrare[edit | edit source]
Fișierul de intrare mapin.txt conține pe prima linie numărul n. Pe linia a doua, separate prin câte un spațiu, sunt elementele șirului.
Date de ieșire[edit | edit source]
În fișierul de ieșire mapout.txt se vor afișa pe primul rând n numere naturale, al i-lea număr reprezentând numărul de apariții ale lui a[i] în secvența a[1], a[2], …, a[i].
Restricții și precizări[edit | edit source]
- 1 ≤ n ≤ 200 000
- 0 <= a[i] <= 1018
Exemplul 1:[edit | edit source]
mapin.txt
7 1 9876543210 1 3 3 9876543210 9876543210
mapout.txt
Datele de intrare corespund restrictiilor impuse 1 1 2 1 2 2 3
Exemplul 2:[edit | edit source]
mapin.txt
map
mapout.txt
Datele de intrare nu corespund restrictiilor impuse
Explicație[edit | edit source]
Primul element este 1. Apare o singură dată până acum. Al doilea element este 9876543210. Și el apare pentru prima dată. Al treilea element este 1. Apare a doua oară. Al patrulea element este 3. Apare prima oară. Al cincilea element este 3. Apare a doua oară. Al șaselea element este 9876543210. Apare a doua oară. Al șaptelea element este 9876543210. Apare a treia oară.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1" start="1">
from collections import defaultdict
def validare(nr_n, string, fisier_out): # functia de validare a datelor de intrare
if not (1 <= nr_n <= 200000): raise ValueError("n nu este in intervalul [1, 200000]")
for numar in string: if not (0 <= numar <= 10**18): # fiecare numar trebuie sa fie intre 0 si 10^18 raise ValueError("Un numar din sir nu este in intervalul [0, 10^18]")
fisier_out.write("Datele de intrare corespund restrictiilor impuse\n")
def rezolvare(string, fisier_out): # functia de rezolvare
aparitii = defaultdict(int) for numar in string: aparitii[numar] += 1 fisier_out.write(str(aparitii[numar]) + " ")
if __name__ == '__main__':
file_in = open("mapin.txt", "r") # declararea fisierelor file_out = open("mapout.txt", "w") # fisierul out trebuie declarat cu optiunea "w" (write)
try: n_str = file_in.readline().strip() # citirea numarului ca sir de caractere try: n = int(n_str) # incercam sa convertim sirul de caractere in numar intreg except ValueError: file_out.write("Datele de intrare nu corespund restrictiilor impuse\n") file_in.close() file_out.close() exit(0) # iesim din program daca conversia esueaza
sir = list(map(int, file_in.readline().split()))
validare(n, sir, file_out) # apelul functiei de validare rezolvare(sir, file_out) # apelul functiei de rezolvare
except ValueError as ve: file_out.write(str(ve)) except IndexError: file_out.write("Datele de intrare nu corespund restrictiilor impuse")
file_in.close() file_out.close()
</syntaxhighlight>