2302 - Memory 009

From Bitnami MediaWiki
Revision as of 18:57, 29 March 2023 by Sovago Rares-Andrei (talk | contribs) (Pagină nouă: == Cerinţa == Se dau două șiruri de numere '''A''' și '''B'''.Calculati '''A ∩ B'''. == Date de intrare == Fișierul de intrare '''memory009.in''' conține pe prima linie numerele '''n, m''' (lungimile celor două șiruri), iar pe a doua linie '''n''' numere naturale separate prin spații, iar pe a treia linie '''m''' numere naturale separate prin spații == Date de ieșire == Dacă datele sunt introduse corect, pe ecran: "Datele sunt introduse corect.",fișierul de i...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa

Se dau două șiruri de numere A și B.Calculati A ∩ B.

Date de intrare

Fișierul de intrare memory009.in conține pe prima linie numerele n, m (lungimile celor două șiruri), iar pe a doua linie n numere naturale separate prin spații, iar pe a treia linie m numere naturale separate prin spații

Date de ieșire

Dacă datele sunt introduse corect, pe ecran: "Datele sunt introduse corect.",fișierul de ieșire memory009.out va conține mulțimea M care reprezinta mulțimea A ∩ B, în ordine crescătoare. În cazul în care datele nu respectă restricțiile, se va afișa: "Datele nu corespund restricțiilor impuse.".

Restricţii şi precizări

  • 1 ≤ n ≤ m ≤ 1.000.000
  • numerele de pe a doua linie și a treia a fișierului de intrare vor fi mai mici sau egale cu 30
  • în fișierul de ieșire nu se repetă elementele !

Exemple

Exemplul 1

memory009.in
3 2
2 5 3
5 9
ecran
Datele sunt introduse corect.
memory009.out
5

Exemplul 2

memory009.in
3 4
1 2 3
2 3 4 5
ecran
Datele sunt introduse corect.
memory009.out
2 3

Exemplul 3

memory009.in
0 2
1 2 3
2 3 4 5
ecran
Datele nu corespund restricțiilor impuse.
memory009.out



Rezolvare

<syntaxhighlight lang="python" line="1">

  1. 2302 - Memory 009

def valideaza_date(n, m, f1, f2):

   if n <= 0 or m <= 0 or len(f1) != 32 or len(f2) != 32:
       print("Datele nu corespund restricțiilor impuse.")
       exit(0)
   for i in range(32):
       if f1[i] < 0 or f2[i] < 0:
           print("Datele nu corespund restricțiilor impuse.")
           exit(0)
   print("Datele sunt introduse corect.")


def rezolva(n, m, f1, f2):

   with open("memory009.out", "w") as fout:
       for i in range(32):
           if f2[i] != 0 and f1[i] != 0:
               fout.write(str(i) + " ")


def executa():

   with open("memory009.in", "r") as fin:
       # Citim numerele n și m de pe prima linie
       n, m = map(int, fin.readline().split())
       f1 = [0] * 32
       f2 = [0] * 32
       # Citim cele n numere ale primei liste de pe a doua linie
       numere1 = list(map(int, fin.readline().split()))
       for x in numere1:
           f1[x] += 1
       # Citim cele m numere ale celei de-a doua liste de pe a treia linie
       numere2 = list(map(int, fin.readline().split()))
       for x in numere2:
           f2[x] += 1
   valideaza_date(n, m, f1, f2)
   rezolva(n, m, f1, f2)


executa()


Explicatie

Programul citeste numerele din fisierul de intrare "memory009.in" și verifică dacă acestea sunt în acord cu specificatiile problemei (n si m trebuie să fie mai mari decat 0, fiecare lista trebuie să aiba 32 de elemente, elementele din fiecare lista trebuie să fie nenegative). Dacă datele de intrare nu sunt valide, programul va afișa un mesaj corespunzător și se va opri.

Dacă datele de intrare sunt valide, programul va citi cele două liste de numere din fișierul de intrare și va stoca numărul de apariții ale fiecărui element din fiecare listă într-un vector corespunzător. Apoi, programul va parcurge aceste două vectori și va scrie în fișierul de ieșire "memory009.out" toate numerele care apar în ambele liste de numere, în ordine crescătoare.

Funcția valideaza_date verifică dacă datele de intrare sunt valide sau nu și afișează un mesaj corespunzător. Funcția rezolva scrie rezultatul în fișierul de ieșire "memory009.out". Funcția executa este funcția principală care citeste datele de intrare, validează aceste date, rezolvă problema și afișează mesaje corespunzătoare





</syntaxhighlight>