Pagini recente » Cod sursa (job #1865939) | Cod sursa (job #2841758) | Cod sursa (job #825857) | Cod sursa (job #2784024) | Cod sursa (job #2042805)
#include <cstdio>
#include <cstring>
#define N 100005
using namespace std;
char ec[N];
int n, nr[27], lung;
int caut_prim(int start, int fin)
{
for(int i=start;i<=fin;i++)
if(ec[i]=='+' || ec[i]=='-')
return i;
return -1;
}
int caut_doi(int start, int fin)
{
for(int i=start;i<=fin;i++)
if(ec[i]=='*')
return i;
return -1;
}
int parcurg(int st, int dr)
{
if(st==dr && ec[st]!=')')
return nr[ec[st]-'a'+1];
if(st==dr)
return 0;
int mij=caut_prim(st, dr);
if(mij>0 && ec[mij]=='+')
if(ec[mij-1]=='+' || ec[mij-1]=='-' || ec[mij-1]=='*')
return parcurg(mij+1, dr);
else
return parcurg(st, mij-1)+parcurg(mij+1, dr);
else
if(mij>0)
if(ec[mij-1]=='+' || ec[mij-1]=='-' || ec[mij-1]=='*')
return -1*parcurg(mij+1, dr);
else
return parcurg(st, mij-1)-parcurg(mij+1, dr);
else
{
mij=caut_doi(st, dr);
if(mij>0)
return parcurg(st, mij-1)*parcurg(mij+1, dr);
else
if(ec[st]=='[')
return parcurg(st+1, dr-1)*parcurg(st+1, dr-1);
else
if(ec[st]=='(')
return parcurg(st+1, dr);
}
}
int main()
{
freopen("eval.in", "r", stdin);
// freopen("eval.out", "w", stdout);
scanf("%d\n", &n);
for(int i=1;i<=n;i++)
scanf("%d\n", &nr[i]);
fgets(ec, N, stdin);
lung=strlen(ec)-1;
printf("%d", parcurg(0, lung));
return 0;
}