0622 - Multimi 2: Difference between revisions
Pagină nouă: == Cerinţa == 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 == Fişierul de intrare '''multimi2.in''' 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''' c... |
No edit summary |
||
(3 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
b) Să se afișeze intersecția celor două mulțimi. | b) Să se afișeze intersecția celor două mulțimi. | ||
== Date de intrare == | == Date de intrare == | ||
Fişierul de intrare ''' | 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 == | == Date de ieşire == | ||
Dacă valoarea lui '''p''' este '''1''', '''se va rezolva numai punctul a)''' din cerință. În acest caz, în fişierul de ieşire ''' | 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 ''' | 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 == | == Restricții și precizări == | ||
* '''1 ≤ N, M ≤ 500000''' | * '''1 ≤ N, M ≤ 500000''' | ||
Line 17: | Line 17: | ||
* Dacă mulţimea rezultată este vidă se va afişa '''-1'''. | * Dacă mulţimea rezultată este vidă se va afişa '''-1'''. | ||
== Exemplul 1 == | == Exemplul 1 == | ||
; | ; multimi2in.txt | ||
: 1 | : 1 | ||
: 3 4 3 5 | : 3 4 3 5 | ||
; | ; multimi2out.txt | ||
: Datele introduse corespund restricțiilor impuse. | |||
: 4 5 6 7 | : 4 5 6 7 | ||
== Explicație == | == Explicație == | ||
Line 28: | Line 29: | ||
'''Atenție! Pentru acest test se rezolvă doar cerința a).''' | '''Atenție! Pentru acest test se rezolvă doar cerința a).''' | ||
== Exemplul 2 == | == Exemplul 2 == | ||
; | ; multimi2in.txt | ||
: 2 | : 2 | ||
: 3 4 3 5 | : 3 4 3 5 | ||
; | ; multimi2out.txt | ||
: Datele introduse corespund restricțiilor impuse. | |||
: 5 6 | : 5 6 | ||
== Explicație == | == Explicație == | ||
Line 38: | Line 40: | ||
Intersecția celor două mulțimi reprezintă elementele comune. | Intersecția celor două mulțimi reprezintă elementele comune. | ||
'''Atenție! Pentru acest test se rezolvă doar cerința b).''' | '''Atenție! Pentru acest test se rezolvă doar cerința b).''' | ||
== Exemplul 3 == | |||
; multimi2in.txt | |||
: 3 | |||
: 5 1 5 1 | |||
; multimi2out.txt | |||
: Datele introduse nu corespund restricțiilor impuse. | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def | # 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 | # Generăm cele două mulțimi | ||
multime1 = set(range( | multime1 = set(range(p1, p1 + n)) | ||
multime2 = set(range( | multime2 = set(range(p2, p2 + m)) | ||
# Calculăm rezultatele în funcție de cerința specificată | # Calculăm rezultatele în funcție de cerința specificată | ||
Line 58: | Line 69: | ||
rezultat = sorted(multime1.intersection(multime2)) | rezultat = sorted(multime1.intersection(multime2)) | ||
return rezultat | |||
with open(' | |||
if 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__": | if __name__ == "__main__": | ||
main() | |||
</syntaxhighlight> | </syntaxhighlight> |
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>