HDU

来源:互联网 发布:淘宝换手机主板 编辑:程序博客网 时间:2024/06/08 02:21

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?
 

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

卡了好长时间..

题意:已知值的表达形式有它本身和(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-6using 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;}



原创粉丝点击