0622 - Multimi 2

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Cunoscând N, P1, M și P2 se cere:

a) Să se afișeze reuniunea celor două mulțimi. b) Să se afișeze intersecția celor două mulțimi.

Date de intrare[edit | edit source]

Fişierul de intrare multimi2in.txt conţine pe prima linie un număr natural p. Pentru toate testele de intrare, numărul p poate avea doar valoarea 1 sau valoarea 2. Pe a doua linie se află patru numere naturale N, P1, M și P2 cu semnificația din enunț.

Date de ieşire[edit | edit source]

Dacă valoarea lui p este 1, se va rezolva numai punctul a) din cerință. În acest caz, în fişierul de ieşire multimi2out.txt se va scrie reuniunea celor două mulțimi.

Dacă valoarea lui p este 2, se va rezolva numai punctul b) din cerință. În acest caz, în fișierul de ieșire multimi2out.txt se va scrie intersecția celor două mulțimi.

Restricții și precizări[edit | edit source]

  • 1 ≤ N, M ≤ 500000
  • 1 ≤ P1, P2 ≤ 750000
  • Pentru rezolvarea corectă a primei cerinţe se acordă 50 de puncte, iar pentru cerința a doua se acordă 50 de puncte.
  • Elementele mulțimii din fișierul de ieșire se vor afişa în ordine crescătoare.
  • Dacă mulţimea rezultată este vidă se va afişa -1.

Exemplul 1[edit | edit source]

multimi2in.txt
1
3 4 3 5
multimi2out.txt
Datele introduse corespund restricțiilor impuse.
4 5 6 7

Explicație[edit | edit source]

p = 1 Prima mulțime este {4,5,6}, iar a doua {5,6,7}. Reuniunea celor două mulțimi reprezintă elementele care aparțin cel puțin unei mulțimi. Atenție! Pentru acest test se rezolvă doar cerința a).

Exemplul 2[edit | edit source]

multimi2in.txt
2
3 4 3 5
multimi2out.txt
Datele introduse corespund restricțiilor impuse.
5 6

Explicație[edit | edit source]

p = 2 Prima mulțime este {4,5,6}, iar a doua {5,6,7}. Intersecția celor două mulțimi reprezintă elementele comune. Atenție! Pentru acest test se rezolvă doar cerința b).

Exemplul 3[edit | edit source]

multimi2in.txt
3
5 1 5 1
multimi2out.txt
Datele introduse nu corespund restricțiilor impuse.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 0622 - Multimi 2

def validare(p, n, p1, m, p2): # functia de validare a datelor de intrare

   if not (1 <= p <= 2) or not (1 <= n, m <= 1000) or not (0 <= p1, p2 <= 10000):
       raise ValueError("Datele de intrare nu corespund restrictiilor impuse")
   else:
       return "Datele de intrare corespund restrictiilor impuse"


def multimi2(p, n, p1, m, p2): # functia de rezolvare

   # Generăm cele două mulțimi
   multime1 = set(range(p1, p1 + n))
   multime2 = set(range(p2, p2 + m))
   # Calculăm rezultatele în funcție de cerința specificată
   if p == 1:
       # Cerința a): reuniunea celor două mulțimi
       rezultat = sorted(multime1.union(multime2))
   else:
       # Cerința b): intersecția celor două mulțimi
       rezultat = sorted(multime1.intersection(multime2))
   return rezultat


def main():

   with open('multimi2in.txt', 'r') as fin, open('multimi2out.txt', 'w') as fout:
       try:
           p = int(fin.readline().strip())
           p1, p1, m, p2 = map(int, fin.readline().split())
           validare_message = validare(p, p1, p1, m, p2)                 # apelul functiei de validare
           fout.write(validare_message + "\n")
           rezultat = multimi2(p, p1, p1, m, p2)    # apelul functiei de rezolvare
           if rezultat:
               fout.write(' '.join(map(str, rezultat)))
           else:
               fout.write('-1')
       except ValueError as ve:
           fout.write(str(ve))


if __name__ == "__main__":

   main()

</syntaxhighlight>