Cod sursa(job #2382708)

Utilizator triscacezarTrisca Vicol Cezar triscacezar Data 18 martie 2019 16:54:33
Problema Eval Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("eval.in");
ofstream g("eval.out");

long long i,n,val[30],S(),P(),B(),N();
char e[100010];
int main()
{
    f>>n;
    for(i=0;i<n;i++)
        f>>val[i];
    i=0;
    f>>e;
    g<<S();
    return 0;
}
long long S()
{
    long long ret=P();
    while(e[i]=='+'||e[i]=='-')
    {
        if(e[i]=='+')
        {
            i++;
            ret+=P();
        }
        else
        {
            i++;
            ret-=P();
        }
    }
    return ret;
}
long long P()
{
    long long ret=B();
    while(e[i]=='*')
    {
        i++;
        ret*=B();
    }
    return ret;
}
long long B()
{
    long long ret;
    if(e[i]=='(')
    {
        i++;
        ret=S();
        i++;
    }
    else if(e[i]=='[')
    {
        i++;
        ret=S();
        ret=ret*ret;
        i++;
    }
    else if(e[i]=='-')
    {
        i++;
        ret=-B();
    }
    else if(e[i]=='+')
    {
        i++;
        ret=B();
    }
    else
        ret=N();
    return ret;
}
long long N()
{
//    cout<<e[i]<<'\n';
    long long ret=val[e[i]-'a'];
    i++;
    return ret;
}