Cod sursă (job #343229)

Utilizator avatar PredaBoss Preda Andrei PredaBoss IP ascuns
Problemă Bizar (clasele 9-10) Compilator cpp | 1,58 kb
Rundă Arhiva de probleme Status evaluat
Dată 25 ian. 2018 06:28:49 Scor 20
#include <bits/stdc++.h>

using namespace std;
ifstream fin("bizar.in");
ofstream fout("bizar.out");
struct stive
{
    int nr,semn,par;
};
stive s[100000];
int p,i,j,k,t,v[100000],b;
char a[100000];
int rez()
{
                v[b]=s[i].nr;
            t=k%s[-1*s[i].nr].semn;
            if(t==0)
                t=s[-1*s[i].nr].semn;
                int ind=0;
            while(ind!=t){
                    i++;
                if(s[i].nr>=0 && s[i].par==-1*v[b])
                ind++;
            }
            k=s[i].nr;
            if(s[i+1].nr<0 && s[i+1].nr!=-1*v[b]){
                b++;
    i++;
                k=rez();}
            while(s[i].nr!=v[b])
            i++;
        i++;
        if(b>0)
    b--;
    return k;

}
int termen()
{
    int n=0;
    while(a[i]-'0'>=0 && a[i]-'0'<=9){
        n=n*10+(a[i]-'0');
        i++;
    }
    return n;
}
void calcul()
{
    while(a[i]!=')' && a[i]!='\0'){
        if(a[i]-'0'>0 && a[i]-'0'<=9){
            s[p].nr=termen();
            s[p].par=k;
            p++;
            s[k].semn++;
        }
        else{
            if(a[i]=='('){
               k=1;
                while(s[k].semn!=0)
                k++;
                i++;
                s[p].nr=-1*k;
                p++;
                calcul();}
            else
                i++;
        }
    }
    s[p].nr=-1*k;
    p++;
    k--;
    i++;
}
int main()
{fin.get(a,100000);
i=0;
p=0;
k=0;
while(a[i]!='\0')
calcul();
p--;
k=s[0].nr;
i=1;
b=0;
while(i<p)
    j=rez();
fout<<j;
    return 0;
}