Cod sursă (job #134649)

Utilizator avatar denisonic Banu Denis denisonic IP ascuns
Problemă Bizar (clasele 9-10) Compilator cpp | 1,34 kb
Rundă Arhiva de probleme Status evaluat
Dată 18 mar. 2015 12:14:41 Scor 40
#include <fstream>
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;

ofstream g("bizar.out");

long n,i,j;
char s[100005];
vector<long> v[100005];
long eval(long nr,long st,long dr,long poz)
{

    long i=st,nrp,sav,x;
    while (i<dr)
    {
        while ((s[i]==',' || s[i]==' ' ) && i<n)
            i++;
        if (s[i]=='(')
        {
            sav=i;
            nrp=1;
            while (nrp!=0 && i<n)
            {
                i++;
                if (s[i]=='(')
                    nrp++;
                if (s[i]==')')
                    nrp--;
            }
            x=v[poz][v[poz].size()-1];
            x=eval(x,sav+1,i,poz+1);
            v[poz][v[poz].size()-1]=x;
            i++;
        }
        else if (i<strlen(s))
        {
            x=0;
            while (s[i]>='0' && s[i]<='9')
            {
                x=x*10+s[i]-'0';
                i++;
            }
            v[poz].push_back(x);
        }
    }

    nr=nr%v[poz].size();
    if (nr==0)
    {
        x=v[poz][v[poz].size()-1];
        v[poz].clear();
        return x;
    }
    x=v[poz][nr-1];
    v[poz].clear();
    return x;
}

int main()
{
    freopen("bizar.in","r",stdin);
    gets(s);

    n=strlen(s);

    g<<eval(1,0,n-1,1);

    g.close();
    return 0;
}