Cod sursă (job #97938)

Utilizator avatar nita_teddy Teddy Nita nita_teddy IP ascuns
Problemă Bizar (clasele 9-10) Compilator cpp | 0,67 kb
Rundă Tema 10 clasele 9-10 2014/15 Status evaluat
Dată 14 dec. 2014 11:37:29 Scor 90
#include <cstdio>
#include <cctype>
#include <vector>
using namespace std;

char str[100002];
int size, sp;
int expr();
int num();
vector<int> list();

int expr(){
	int rez=num();
	while(str[sp]=='('){
		vector<int> v=list();
		rez=v[(rez-1)%v.size()];
	}
	return rez;
}

vector<int> list(){
	vector<int> rez;
	sp++;
	while(str[sp-1]!=')'){
		rez.push_back(expr());
		sp++;
	}
	return rez;
}

int num(){
	int rez=0;
	while (isdigit(str[sp])) {
		rez=rez*10+str[sp++]-'0';
	}
	return rez;
}

int main()
{
	freopen("bizar.in", "r", stdin);
	freopen("bizar.out", "w", stdout);
	while((str[size++]=fgetc(stdin))!='\n'){
		if(str[size-1]==' ')
			size--;
	}
	printf("%d", expr());
	return 0;
}