Pagini recente »
Istoria paginii utilizator/iuliacatalina
|
Cod sursă (job #115265)
|
Istoria paginii runda/lasm_31_03_2019_10_12/clasament
|
Monitorul de evaluare
|
Cod sursă (job #98800)
Cod sursă (job
#98800)
#include<cstdio>
#define MAX 100000
using namespace std;
int per[MAX+1];
int v[MAX+1];
int k;
char s[MAX+1];
int p;
void consume(int cat)
{
int i=1,niv=1;
while(i<cat)
{
while (s[p] == ' ')
p++;
if (s[p] == '(')
{
niv++;
k++;
}
else if (s[p] == ')')
niv--;
else if (s[p] == ',' && niv == 1)
i++;
p++;
}
}
void consume2()
{
int niv=1;
while(niv>0)
{
while(s[p] == ' ')
p++;
if (s[p] == '(')
{
niv++;
k++;
}
else if (s[p]==')')
niv--;
p++;
}
}
int counter()
{
int val=0;
while(s[p]==' ')
p++;
while(s[p] >= '0' &&s[p] <= '9')
{
val = val * 10 + s[p]- '0';
p++;
while(s[p] == ' ')
p++;
}
return val;
}
int E()
{
int val=counter();
while(s[p]==' ') p++;
while(s[p]=='(')
{
p++;
while(s[p]==' ') p++;
consume((val-1)%v[k]+1);
k++;
while(s[p]==' ') p++;
val=E();
while(s[p]==' ') p++;
consume2();
}
return val;
}
int main()
{
FILE *fin, *fout;
fin=fopen("bizar.in","r");
fout=fopen("bizar.out","w");
int i,top;
fgets(s,MAX,fin);
p=0;
k=0;
for(i=1; i<=MAX/3; i++) v[i]=0;
i=0;
top=1;
while(s[p]!='\0')
{
if ('('==s[p])
{
i=top;
top++;
k++;
v[i]=1;
per[k]=i;
}
else if (s[p]==')')
{
k--;
i=per[k];
}
else if (s[p]==',') v[i]++;
p++;
}
p=0;
k=1;
fprintf (fout,"%d",E());
return 0;
}