== include(page="template/taskheader" task_id="constrangere") ==
Poveste și cerință...
O constrângere este o egalitate sau o inegalitate În care apar variable și constante. Fiecare variabilă se află într-un domeniu de definiție (mulțimea valorilor posibile) finit și discret (inclus în mulțimea numerelor naturale). Spunem că o constrângere este satisfăcută dacă și numai dacă fiecărei variabile i se poate atribui o valoare din propriul ei domeniu de definiție astfel încât egalitatea sau inegalitatea este satisfăcută.
De exemplu, constrângerea $X+Y=5$ cu domeniile de definiție $X ∈ {1, 2, 3, 4}$ și $Y ∈ {1, 2, 3, 4}$ se poate satisface dacă:
* $X = 1$ și $Y = 4$
* $X = 2$ și $Y = 3$
* $X = 3$ și $Y = 2$
* $X = 4$ și $Y = 1$
Așadar, sunt 4 moduri în care se pot atribui valori variabilelor astfel încât să constrângerea să fie satisfăcută.
Citiți secțiunea de restricții și precizări pentru a vedea cum poate arăta o constrângere.
h2. Cerință
Determinați în câte moduri se pot atribui valori variabilelor dacă se cunosc domeniile de definiție ale acestora și constrângerea pe care trebuie să o respecte.
h2. Date de intrare
Fișierul de intrare $constrangere.in$ ...
Fișierul de intrare $constrangere.in$ conține pe prima linie un număr întreg [$N$], reprezentând numărul de variabile.
Pe următoarele $N$ linii sunt descrise domeniile de definiție ale variabilelor și fiecare dintre aceste linii este de forma: $V$ $m$ $M$ ([$V$] este o literă mare a alfabetului englez și reprezintă numele variabilei, $m$ este un număr întreg, reprezentând limita inferioară a domeniul de definiție iar $M$ este un număr întreg, reprezentând limita superioară a domeniul de definiție).
Pe ultima linie a fișierului de intrare se află constrângerea ce trebuie respectată.
h2. Date de ieșire
În fișierul de ieșire $constrangere.out$ ...
În fișierul de ieșire $constrangere.out$ se va afla un singur număr natural, numărul de moduri distincte în care pot fi atribuite valori variabilelor.
h2. Restricții
* $... ≤ ... ≤ ...$
* $1 ≤ N ≤ 10$
* $1 ≤ m ≤ M ≤ 10$
* Constrângerea va conține un singur semn de egalitate ([$=$]) sau un singur semn de mai mic ([$<$]).
* Constrângerea poate conține: paranteze rotunde (eventual imbricate), operatorii $+$, $-$ și $*$, nume de variabile, constante (numere întregi) și spații.
* Operatorul unar (-) are precedența cea mai mare. Apoi urmează operatorul de înmulțire ([$*$]). La final au loc operațiile de adunare ([$+$]) și scădere (-) cu aceeași precedență.
* Asocierea termenilor și factorilor se face de la stânga la dreapta. (ex.: $2 - 2 - 2 = (2 - 2) - 2 = 0 - 2 = -2$)
* Fiecare variabilă va apărea o singură dată în constrângere.
* Numărul de constante nu depășește numărul de variabile + [$1$].
* Fiecare constantă $C$ respectă restricția $-100 ≤ C ≤ 100$.
* Lungimea unei constrângeri nu depășește $100$ de caractere.
* Constrângerea este corectă sintactic.
* Oricum s-ar da valori variabilelor, cu respectarea domeniilor lor de definiție, orice rezultat intermediar folosit la evaluarea constrângerii se va afla în intervalul $[-2[^15^], 2[^15^] - 1]$.
h2. Exemplu
table(example).
|_. constrangere.in |_. constrangere.out |
| This is some
text written on
multiple lines.
| This is another
text written on
multiple lines.
| 2
X 1 4
Y 1 4
X+Y=5
| 4
|
h3. Explicație
...
În primul exemplu, cele 4 modalități de a atribui valori variabilelor sunt:
$X = 1$ și $Y = 4$
$X = 2$ și $Y = 3$
$X = 3$ și $Y = 2$
$X = 4$ și $Y = 1$
== include(page="template/taskfooter" task_id="constrangere") ==