2302 - Memory 009

De la Universitas MediaWiki
Versiunea din 29 martie 2023 18:57, autor: Sovago Rares-Andrei (discuție | contribuții) (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...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

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

# 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  fie mai mari decat 0, fiecare lista trebuie  aiba 32 de elemente, elementele din fiecare lista trebuie  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