Smeech
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 482 Accepted Submission(s): 109
Problem 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:
1) An integer represents itself
2) 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?
1) An integer represents itself
2) 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.003.00
卡了好长时间..
题意:已知值的表达形式有它本身和(p,e1,e2)两种,给出个值,求值的直观结果,保留两位输出。(其中(p,e1,e2)=(e1+e2)*p+(e1-e2)*(1-p))#include<iostream> #include<cmath> #include<cstdio> #include<map> #include<set> #include<cstring> #include<string> #include<algorithm> #define min 1e-6 using namespace std; char s[100000]; int FLAG; double func1(char c) { char str[100000]; str[0]=c; int flag=1; while(str[flag++]=s[FLAG++]) if(str[flag-1]==' '||str[flag-1]=='\n'||str[flag-1]==')') break; str[flag-1]='\0'; double re; sscanf(str,"%lf",&re); return re; } double func2() { double a[3]; FLAG++; for(int i=0; i<3; i++) if(s[FLAG]!=0) if(s[FLAG]!='(') a[i]=func1(s[FLAG++]); else a[i]=func2(); FLAG++; return (a[2]+a[1])*a[0]+(a[1]-a[2])*(1-a[0]); } int main() { while(gets(s)&&strcmp(s,"()")) { FLAG=0; double x; if(s[0]!='(') sscanf(s,"%lf",&x); else x=func2(); printf("%.2lf\n",x); } return 0; }