Pagini recente » Cod sursa (job #2331935) | Cod sursa (job #2355539) | Cod sursa (job #1509213) | Cod sursa (job #512799) | Cod sursa (job #1154033)
#include<cstdio>
#include<cstring>
#include<algorithm>
#define M -2000000000
#include<queue>
using namespace std;
FILE *f=fopen("evaluare.in","r");
FILE *g=fopen("evaluare.out","w");
char a[100002],aux[100002],c;
struct kkt
{
int pr;
int pozz;
}auxx;
struct cmp
{
bool operator() (kkt a,kkt b)
{
if(a.pr<b.pr) return true;
else if(a.pr==b.pr) return a.pozz>b.pozz;
else return false;
}
};
priority_queue<kkt,vector<kkt>,cmp>v;
int p,val[100002],k,nr,kk;
int valoare(int a,char c,int b)
{
if(c=='+') return a+b;
if(c=='/') return a/b;
if(c=='*') return a*b;
if(c=='-') return a-b;
return 0;
}
int construire()
{
int poz,j,i;
while(!v.empty())
{
poz=v.top().pozz;
i=poz;
while(val[i]==M&&i>=1)i--;
j=poz;
while(val[j]==M&&j<=k)j++;
val[poz]=valoare(val[i],aux[poz],val[j]);
v.pop();
val[i]=M;
val[j]=M;
}
return *max_element(val+1,val+k+1);
}
int main()
{
unsigned int i;
fscanf(f,"%s",a);
for(i=1;i<=strlen(a);i++)val[i]=M;
for(i=0;i<strlen(a);i++)
{
if(a[i]=='-'||a[i]=='+')
{k++;
auxx.pozz=k;
auxx.pr=p+1;
v.push(auxx);
aux[k]=a[i];
}
if(a[i]=='*'||a[i]=='/')
{
k++;
auxx.pozz=k;
auxx.pr=p+2;
v.push(auxx);
aux[k]=a[i];
}
if(a[i]=='('){p+=3;++k;}
if(a[i]==')'){p-=3;++k;}
if('0'<=a[i]&&a[i]<='9')
{
nr=0;
while('0'<=a[i]&&a[i]<='9')
{
nr=nr*10+a[i]-'0';i++;
}
i--;
++k;
val[k]=nr;
}
}
fprintf(g,"%d",construire());
return 0;
}