apel

Time limit: 0.1s Memory limit: 2MB Input: apel.in Output: apel.out

Un apel de funcţie este un şir de caractere, constituit din numele funcţiei apelate (o literă mare a alfabetului englez), urmat de lista parametrilor actuali ai funcţiei, încadrată între paranteze rotunde. În lista de parametri actuali pot fi 11, 22, \dots maximum 1010 parametri, separaţi prin virgulă. Un parametru actual poate fi o constantă (o cifră arabă), o variabilă (o literă mică a alfabetului englez) sau un apel de funcţie.

De exemplu: F(2,a,G(c),G(H(x)))F(2,a,G(c),G(H(x)))

Funcţia apelată este FF cu 44 parametri. Primul parametru actual este constanta 22, al doilea este variabila aa, al treilea este apelul funcţiei GG (funcţie cu un singur parametru – variabila cc), al patrulea este apelul funcţiei GG (care are ca parametru apelul funcţiei HH).

Numărul de parametri ai unei funcţii se numeşte aritate. O funcţie poate fi apelată de ori câte ori, dar de fiecare dată numărul de parametri specificaţi la apel trebuie să fie egal cu aritatea funcţiei.

Fiecare dintre funcţiile care intervin în apel se poate explicita cu ajutorul unei expresii aritmetice sub forma:

F(a,b,c,)=F(a,b,c,\dots) = expresie_aritmetică

Parametrii specificaţi la explicitarea funcţiei îi vom denumi parametri formali. Dacă funcţia are aritatea nn, atunci când explicităm funcţia, parametrii formali sunt denumiţi utilizând în ordine primele nn litere mici ale aflabetului englez. În expresia aritmetică care explicitează funcţia apar ca variabile doar parametrii formali ai funcţiei (denumiţi aşa cum am precizat cu primele nn litere mici ale alfabetului englez).

Expresia aritmetică ce explicitează o funcţie este constituită din unul sau mai mulţi termeni separaţi prin operatorii + (semnificând adunare) sau - (semnificând scădere). Un termen este constituit din unul sau mai mulţi factori separaţi prin operatorul * (semnificând înmulţire). Un factor poate fi o constantă (cifră arabă), o variabilă (un parametru formal al funcţiei) sau o expresie aritmetică încadrată între paranteze rotunde.

Valoarea obţinută în urma unui apel de funcţie se obţine înlocuind în ordine parametrii formali cu parametrii actuali, apoi efectuând operaţiile specificate în expresia aritmetică ce explicitează funcţia.

Cerinţă

Dat fiind un apel de funcţie, valorile variabilelor care intervin în acest apel, precum şi explicitările funcţiilor utilizate în acest apel, să se determine valoarea obţinută în urma acestui apel.

Date de intrare

Fişierul de intrare apel.in conţine pe prima linie şirul de caractere care reprezintă apelul funcţiei. Pe următoarele linii sunt descrise valorile variabilelor, câte o variabilă pe o linie sub forma: numevariabila=valoarenume_{variabila} = valoare. Pe următoarele linii sunt explicitate funcţiile ce intervin în apelul de pe prima linie, sub forma descrisă în enunţ.

Date de ieşire

Fişierul de ieşire apel.out va conţine o singură linie pe care va fi scris un număr întreg reprezentând valoarea obţinută în urma apelului din fişierul de intrare.

Restricții și precizări

  • Aritatea unei funcții este mai mică sau egală cu 1010.
  • Orice linie din fişierul de intrare are maximum 250250 de caractere.
  • Valorile variabilelor sunt numere naturale de maximum 33 cifre.
  • Valoarea obţinută în urma apelului funcţiei este în intervalul [2109,2109][-2 \cdot 10^9, 2 \cdot 10^9].

Exemplul 1

apel.in

F(2,a,G(c),G(H(x)))
x=3
a=0
c=1
H(a)=2*a-3
G(a)=2*a*a-5*a+6
F(a,b,c,d)=a*b*c-2*d*c+4*a*c

apel.out

-30

Explicație

Funcţia FF are 44 parametri. Primul parametru formal (a)(a) este înlocuit de primul paramatru actual ((deci are valoarea 2)2).

Al doilea parametru formal (b)(b) este înlocuit de al doilea parametru actual deci are valoarea variabilei a (a \ (adică 0)0).

Al treilea parametru formal (c)(c) este înlocuit de al treilea parametru actual ((apelul G(c))G(c)) deci are valoarea 21151+6=32 \cdot 1 \cdot 1 - 5 \cdot 1 + 6 = 3

Al patrulea parametru formal (d)(d) primeşte valoarea celui de al patrulea parametru actual ((apelul G(H(x)))G(H(x))) adică 2H(x)H(x)5H(x)+6=2(2x3)(2x3)5(2x3)+6=92 \cdot H(x) \cdot H(x) - 5 \cdot H(x) + 6 = 2 \cdot (2 \cdot x - 3) \cdot (2 \cdot x - 3) - 5 \cdot (2 \cdot x - 3) + 6 = 9.

Deci, valoarea apelului funcţiei FF este: 203293+423=302 \cdot 0 \cdot 3 - 2 \cdot 9 \cdot 3 + 4 \cdot 2 \cdot 3 = -30.

Log in or sign up to be able to send submissions!