Cod sursa(job #300666)

Utilizator tibiletsKoos Tiberiu Iosif tibilets Data 7 aprilie 2009 16:34:40
Problema Evaluarea unei expresii Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<fstream.h>
#include<string.h>
struct nod
{long long e;
nod *s,*d;}*c;
char s[100002],e[100002];
long long p[100002],v[100002],i,j,n,k;
nod* arb(long long li,long long ls)
{nod* c;
 long long i,j,min;
 min=p[ls];i=ls;
 for(j=ls;j>=li;j--)
  if(p[j]<min)
  {min=p[j];i=j;}
 c=new nod;c->e=i;
 if(li==ls)c->s=c->d=0;
 else
 {c->s=arb(li,i-1);
  c->d=arb(i+1,ls);}
 return c;
}
long long parc(nod* c)
{if(c)
  switch(e[c->e])
  {case '+':return parc(c->s)+parc(c->d);
   case '-':return parc(c->s)-parc(c->d);
   case '*':return parc(c->s)*parc(c->d);
   case '/':return parc(c->s)/parc(c->d);
   default :return v[c->e];
  }
}
int main()
{ifstream f("evaluare.in");
ofstream g("evaluare.out");
f.get(s,100002);
n=strlen(s);
for(;i<n;++i)
 switch(s[i])
 {case ')':j-=2;break;
  case '(':j+=2;break;
  case '+':p[k]=j+1;e[k++]='+';break;
  case '-':p[k]=j+1;e[k++]='-';break;
  case '*':p[k]=j+2;e[k++]='*';break;
  case '/':p[k]=j+2;e[k++]='/';break;
  default :{while(s[i]>='0'&&s[i]<='9')
	    {v[k]=v[k]*10+s[i]-'0';
	     ++i;}
	    p[k++]=2000000000;--i;}
 }
c=arb(0,k-1);
g<<parc(c);
return 0;
}