<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2460_-_multimi5</id>
	<title>2460 - multimi5 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2460_-_multimi5"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2460_-_multimi5&amp;action=history"/>
	<updated>2026-05-01T04:00:49Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2460_-_multimi5&amp;diff=8229&amp;oldid=prev</id>
		<title>Aurelia Raluca: Pagină nouă: == Enunt ==   O mulțime cu elemente numere naturale poate fi scrisă într-o formă redusă dacă, ordonând crescător elementele ei, diferența dintre oricare două valori alăturate este aceeași. De exemplu, mulțimea D={11, 14, 17, 20, 23} poate fi scrisă sub forma D=11-23/3, precizând elementul minim, elementul maxim și diferența dintre elemente. Date fiind N mulțimi scrise sub forma redusă, fiecare fiind notată cu o literă mare a alfabetului englez, se cere s...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2460_-_multimi5&amp;diff=8229&amp;oldid=prev"/>
		<updated>2023-12-17T20:19:07Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Enunt ==   O mulțime cu elemente numere naturale poate fi scrisă într-o formă redusă dacă, ordonând crescător elementele ei, diferența dintre oricare două valori alăturate este aceeași. De exemplu, mulțimea D={11, 14, 17, 20, 23} poate fi scrisă sub forma D=11-23/3, precizând elementul minim, elementul maxim și diferența dintre elemente. Date fiind N mulțimi scrise sub forma redusă, fiecare fiind notată cu o literă mare a alfabetului englez, se cere s...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunt == &lt;br /&gt;
&lt;br /&gt;
O mulțime cu elemente numere naturale poate fi scrisă într-o formă redusă dacă, ordonând crescător elementele ei, diferența dintre oricare două valori alăturate este aceeași. De exemplu, mulțimea D={11, 14, 17, 20, 23} poate fi scrisă sub forma D=11-23/3, precizând elementul minim, elementul maxim și diferența dintre elemente. Date fiind N mulțimi scrise sub forma redusă, fiecare fiind notată cu o literă mare a alfabetului englez, se cere să se calculeze o expresie care poate conține:&lt;br /&gt;
&lt;br /&gt;
*operația de reuniune, notată cu +;&lt;br /&gt;
*operația de intersecție, notată cu *;&lt;br /&gt;
*literele asociate mulțimilor;&lt;br /&gt;
*paranteze rotunde.&lt;br /&gt;
Considerăm că valoarea expresiei este mulțimea obținută după efectuarea operațiilor specifice mulțimilor considerând că operațiile de intersecție au prioritate mai mare decât cele de reuniune.&lt;br /&gt;
&lt;br /&gt;
== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Cunoscând forma redusă a celor N mulțimi și o expresie, să se calculeze valoarea expresiei date.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Datele de intrare se citesc din fişierul multimi5.in, care are următoarea structură:&lt;br /&gt;
- Pe prima linie se află numărul natural N, reprezentând numărul mulțimilor;&lt;br /&gt;
- Pe următoarele N linii se află formele reduse ale celor N mulțimi, câte o mulțime pe fiecare linie;&lt;br /&gt;
- Pe linia N+2 se află expresia ce trebuie calculată.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Datele de ieşire se vor scrie în fişierul multimi5.out, astfel:&lt;br /&gt;
- Pe prima linie se va scrie numărul elementelor mulțimii obținute în urma evalării expresiei date;&lt;br /&gt;
- Pe linia a doua se vor scrie, în ordine crescătoare, elementele mulțimii respctive, separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;lt; N ≤ 16&lt;br /&gt;
*Elementele mulțimilor sunt numere naturale cuprinse între 0 și 1.000.000.000;&lt;br /&gt;
*Numărul elementelor unei mulțimi este maximum 10.000;&lt;br /&gt;
*Numărul caracterelor expresiei este cuprins între 3 și 1000;&lt;br /&gt;
*Forma redusă a unei mulțimi și expresia dată nu conțin spații;&lt;br /&gt;
*Se garantează că, pentru toate datele de test, valoarea expresiei nu poate fi mulțimea vidă;&lt;br /&gt;
*Se garantează că, în teste care totalizează 30 de puncte, expresia nu conține paranteze;&lt;br /&gt;
*Se garantează că, în teste care totalizează 60 de puncte, cardinalul fiecărei mulțimi date la intrare nu depășește valoarea 1000;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
&lt;br /&gt;
; intrare&lt;br /&gt;
&lt;br /&gt;
:3&lt;br /&gt;
:A=2-8/2&lt;br /&gt;
:C=11-23/3&lt;br /&gt;
:B=4-16/4&lt;br /&gt;
:A*(B+C)&lt;br /&gt;
&lt;br /&gt;
; iesire&lt;br /&gt;
&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
:2&lt;br /&gt;
:4 8&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
&lt;br /&gt;
; intrare&lt;br /&gt;
&lt;br /&gt;
:3&lt;br /&gt;
:A=10-2/2&lt;br /&gt;
:B=3-7/2&lt;br /&gt;
:C=8-12/2&lt;br /&gt;
:C*A+A*C&lt;br /&gt;
&lt;br /&gt;
:Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
== Rezlvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#2460 - multimi5&lt;br /&gt;
&lt;br /&gt;
def eval_multime_redusa(minim, dif, n):&lt;br /&gt;
    return minim + n * dif&lt;br /&gt;
def eval_expresie(multimi_reduse, expresie):&lt;br /&gt;
    stack = []&lt;br /&gt;
    current_set = None&lt;br /&gt;
&lt;br /&gt;
    for char in expresie:&lt;br /&gt;
        if char.isalpha():&lt;br /&gt;
            # Dacă este o literă, adaugă mulțimea corespunzătoare la stivă&lt;br /&gt;
            current_set = eval_multime_redusa(*multimi_reduse[char], n=1)&lt;br /&gt;
            stack.append(set([current_set]))&lt;br /&gt;
        elif char == &amp;#039;*&amp;#039;:&lt;br /&gt;
            # Operație de intersecție&lt;br /&gt;
            set_b = stack.pop()&lt;br /&gt;
            set_a = stack.pop()&lt;br /&gt;
            result_set = set_a.intersection(set_b)&lt;br /&gt;
            stack.append(result_set)&lt;br /&gt;
        elif char == &amp;#039;+&amp;#039;:&lt;br /&gt;
            # Operație de reuniune&lt;br /&gt;
            set_b = stack.pop()&lt;br /&gt;
            set_a = stack.pop()&lt;br /&gt;
            result_set = set_a.union(set_b)&lt;br /&gt;
            stack.append(result_set)&lt;br /&gt;
        elif char == &amp;#039;(&amp;#039;:&lt;br /&gt;
            # Deschide paranteză, adaugă mulțimea curentă la stivă&lt;br /&gt;
            stack.append(current_set)&lt;br /&gt;
        elif char == &amp;#039;)&amp;#039;:&lt;br /&gt;
            # Închide paranteza, evaluează operațiile până la ultima paranteză deschisă&lt;br /&gt;
            current_set = stack.pop()&lt;br /&gt;
            stack.pop()&lt;br /&gt;
            stack.append(current_set)&lt;br /&gt;
&lt;br /&gt;
    return stack[0]&lt;br /&gt;
# Presupunem că avem următoarele mulțimi reduse&lt;br /&gt;
multimi_reduse = {&lt;br /&gt;
    &amp;#039;A&amp;#039;: (10, 2),&lt;br /&gt;
    &amp;#039;B&amp;#039;: (5, 3),&lt;br /&gt;
    &amp;#039;C&amp;#039;: (8, 4)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Și o expresie&lt;br /&gt;
expresie = &amp;#039;(A * B) + C&amp;#039;&lt;br /&gt;
&lt;br /&gt;
# Evaluăm expresia&lt;br /&gt;
rezultat = eval_expresie(multimi_reduse, expresie)&lt;br /&gt;
&lt;br /&gt;
print(rezultat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aurelia Raluca</name></author>
	</entry>
</feed>