0622 - Multimi 2: Difference between revisions
No edit summary |
No edit summary |
||
(One intermediate revision by the same user not shown) | |||
Line 48: | Line 48: | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
# 0622 - Multimi 2 | |||
def validare(p, n, p1, m, p2): # functia de validare a datelor de intrare | 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): | if not (1 <= p <= 2) or not (1 <= n, m <= 1000) or not (0 <= p1, p2 <= 10000): | ||
Line 85: | Line 86: | ||
except ValueError as ve: | except ValueError as ve: | ||
fout.write(str(ve)) | fout.write(str(ve)) | ||
if __name__ == "__main__": | if __name__ == "__main__": |
Latest revision as of 19:53, 10 November 2023
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>
- 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>