Smeech
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 2129 | Accepted: 548 |
Description
Professor Octastichs has invented a new programming language, Smeech. An expression in Smeech may be a positive or negative integer, or may be of the form (p e1 e2) where p is a real number between 0 and 1 (inclusive) and e1 and e2 are Smeech expressions. The value represented by a Smeech expression is as follows:
- An integer represents itself
- With probability p, (p e1 e2) represents x + y where x is the value of e1 and y is the value of e2; otherwise it represents x - y.
Given a Smeech expression, what is its expected value?
Input
Input consists of several Smeech expressions, one per line, followed by a line containing ().
Output
For each expression, output its expected value to two decimal places.
Sample Input
7 (.5 3 9) ()
Sample Output
7.00 3.00
#include<iostream>
#include<cstdio>
#include<string>
#include<stack>
#include<cstring>
#include<cstdlib>
#include<cctype>
using namespace std;
int main()
{
string str;
while(getline(cin,str))
{
if(str=="()") break;
stack<double> q;
for(int i=0;i<str.size();)
{
if(str[i]==' '||str[i]=='(') i++;
else if(isdigit(str[i])||str[i]=='-') //考虑负数
{
string temp;
for(;i<str.size()&&str[i]!=' '&&str[i]!=')';i++)
{
temp+=str[i];
}
double x=atof(temp.c_str());
q.push(x);
}
else //')'情况
{
double p,x,y;
y=q.top();q.pop();
x=q.top();q.pop();
p=q.top();q.pop();
double cnt=p*(x+y)+(1-p)*(x-y);
//cout<<"p="<<p<<"x="<<x<<"y="<<y<<"cnt="<<cnt<<endl;
q.push(cnt);
i++;
}
}
double ans=q.top();
printf("%.2lf/n",ans);
}
return 0;
}