Pagini recente »
Istoria paginii runda/cexgj_10_1
|
Cod sursă (job #15017)
|
Borderou de evaluare (job #128839)
|
Borderou de evaluare (job #565560)
|
Cod sursă (job #344368)
Cod sursă (job
#344368)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bizar.in");
ofstream fout("bizar.out");
struct stive
{
int nr,semn,par,ap,sf;
};
stive s[50000];
int p,i,j,k,t,v[100000],b,c;
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!=v[b]){
b++;
i++;
k=rez();}
i=s[-1*v[b]].sf+1;
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]=='('){
c++;
k=c;
i++;
s[p].nr=-1*k;
s[k].ap++;
p++;
calcul();}
else
i++;
}
}
if(a[i]==')')
s[k].sf=p;
s[p].nr=-1*k;
s[k].ap++;
p++;
while(s[k].ap==2)
k--;
i++;
}
int main()
{fin.get(a,100000);
i=0;
p=0;
k=0;
c=0;
while(a[i]!='\0')
calcul();
p--;
k=s[0].nr;
i=1;
b=0;
while(i<p)
j=rez();
fout<<j;
return 0;
}