3974 - IRDDS
Cerința[edit | edit source]
Se dau 2 mulţimi de numere naturale A și B. Să se afișeze mulţimea rezultată în urma efectuării unei operații.
Date de intrare[edit | edit source]
Programul citește de la tastatură: Pe prima linie 2 numere naturale N și M, reprezentând numărul elementelor mulţimii A, respectiv B, urmate de unul dintre caracterele * + - % :
- * intersecţie A∩B.
- + reuniune A∪B.
- - diferența A∖B.
- % diferența simetrică (A∖B)∪(B∖A).
Pe cea de-a 2-a linie N numere naturale reprezentând elementele mulţimii A. Pe cea de-a 3-a linie M numere naturale reprezentând elementele mulţimii B.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran elementele mulţimii rezultate, ordonate crescător, în urma efectuării operaței.
Restricții și precizări[edit | edit source]
- 1 ≤ N, M ≤ 200.000
- elementele mulţimilor A și B vor fi mai mici decât 1.000.000.000
- nu există cazul ca în urma efectuării uneia dintre operatii rezultatul să fie egal cu mulţimea vidă.
Exemplul 1[edit | edit source]
- Intrare
- 5 5 %
- 4 5 6 7 8
- 1 2 3 4 5
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 1 2 3 6 7 8
Explicație[edit | edit source]
({4,5,6,7,8}∖{1,2,3,4,5})∪({1,2,3,4,5}∖{4,5,6,7,8})={1,2,3,6,7,8}.
Exemplul 2[edit | edit source]
- Intrare
- 5 5 %
- 4 5 6 7 8
- 1 2 3 4 5000000000
- Ieșire
- Datele introduse nu corespund restricțiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1">
- 3974 - IRDDS
def validare(n_validare, m_validare, a_validare, b_validare):
if n_validare < 1 or n_validare > 200000 or m_validare < 1 or m_validare > 200000: raise ValueError
for numar in a_validare + b_validare: if numar < 1 or numar > 1000000000: raise ValueError
print("Datele de intrare corespund restrictiilor impuse") return True
def operatie(a_operatie, b_operatie, op_operatie):
if op_operatie == '*': rezultat_operatie = set(a_operatie).intersection(b_operatie) elif op_operatie == '+': rezultat_operatie = set(a_operatie).union(b_operatie) elif op_operatie == '-': rezultat_operatie = set(a_operatie).difference(b_operatie) elif op_operatie == '%': rezultat_operatie = set(a_operatie).symmetric_difference(b_operatie) else: raise ValueError("Operatia nu este valida")
return sorted(list(rezultat_operatie))
if __name__ == '__main__':
try: n_main, m_main, op_main = input( "Introduceti numarul de elemente din A, numarul de elemente din B si operatia " ).split() n_main = int(n_main) m_main = int(m_main) A_main = list(map(int, input("Introduceti elementele multimii A ").split())) B_main = list(map(int, input("Introduceti elementele multimii B ").split())) validare(n_main, m_main, A_main, B_main) rezultat_main = operatie(A_main, B_main, op_main) print(" ".join(map(str, rezultat_main)))
except ValueError: print("Datele de intrare nu corespund restrictiilor impuse") except IndexError: print("Datele de intrare nu corespund restrictiilor impuse")
</syntaxhighlight>