Pagini recente »
so2022-faza_pe_parcare
|
Cod sursă (job #14463)
|
Clasament adunare
|
Istoria paginii utilizator/trifuadelaida
|
Cod sursă (job #98813)
Cod sursă (job
#98813)
#include<cstdio>
using namespace std;
FILE *in = fopen("bizar.in","r");
FILE *out = fopen("bizar.out","w");
const int Nmax = 100005;
char S[Nmax];
int nre,p,v[Nmax];
int get_val();
int central(int , int);
int get_numbers(int );
int main (){
char c=fgetc(in);
while(c!='\n'){
if(c!=' ')
S[nre++]=c;
c=fgetc(in);
}
fprintf(out,"%d",central(0,get_val()));
return 0;
}
int get_val(){
int val = 0;
while(S[p]>='0' && S[p]<='9'){
val=val*10+S[p]-'0';
p++;
}
return val;
}
int get_numbers(int poz){
int pozf=poz, X;
while(S[p]!=')'){
X=get_val();
if(S[p]==','){
v[pozf++]=X;
p++;
}else if(S[p]==')'){
v[pozf++]=X;
}
else v[pozf++]=central(pozf,X);
}
p++;
return pozf;
}
int central(int poz, int X){
int pozf;
while(S[p]!=')' && p<nre){
if(S[p]=='('){
p++;
pozf = get_numbers(poz);
}
if(pozf!=poz){
int l = pozf - poz;
if(l<X){
int rr = X % l;
if(!rr) rr = l - 1;
else rr--;
X = v[rr+poz];
}else X = v[poz+X-1];
pozf=poz;
}
}
return X;
}