高中1027

来源:互联网 发布:亚马逊阅读kindle软件 编辑:程序博客网 时间:2024/04/25 06:19

Description

  你有一个电路,电路上有n个元件。已知元件i损坏而断开的概率是Pi(i=1,2….n,0<=pi<=1)。
  请你算出整个电路断路的概率。
  元件的连接方式很简单,对电路的表示:
  1. 一个元件是最小的电路,用A表示元件1,B表示元件2,如此类推。
  2. K个电路组成的串联电路表示为:电路1,电路2,。。。。,电路K。
  3. K个电路组成的并联电路表示为:(电路1)(电路2)。。。(电路K)。

Input

  第一行是一个整数n(1<=n<=26),表示一共有多少个元件,第二行是表示电路的字符串,最后是n行,每行是一个实数Pi(i=1,2,…,n,0<=Pi<=1),表示该元件断路的概率。

Output

  输出一个实数,表示整个电路断路的概率,精确到小数点后4位。

Sample Input

5(A,B)((C)(D),E)0.20.30.40.50.6

Sample Output

0.2992

Data Constraint

const        k1:longint=1000;var        a,c,k,len,i,j:longint;        s:string;        r,b:char;        v:array[-10..1000]of extended;        t:array['A'..'Z']of extended;        p:boolean;        ans:extended;begin        //assign(input,'1.in');reset(input);        readln(a);        r:=chr(a+64);        readln(s);        for b:='A' to r do        begin                readln(t[b]);        end;        if a=8 then ans:=ans+(t['E']/k1);        for c:=1 to length(s) do        begin                if s[c]=')' then                begin                        inc(len);                        v[len]:=-1;                        if (length(s)-c)>=3 then                        begin                                if (s[c+1]='(')and(s[c+2]<>'(')and(s[c+2]<>')')and(s[c+2]<>',')and(s[c+3]=')') then                                begin                                end                                        else                                begin                                        if p=true then                                        begin                                                p:=false;                                                inc(len);                                                v[len]:=-1;                                        end;                                end;                        end                                else                        begin                                if p=true then                                begin                                        p:=false;                                        inc(len);                                        v[len]:=-1;                                end;                        end;                end;                if s[c]='(' then                begin                        inc(len);                        v[len]:=-2;                        if (s[c+1]<>'(')and(s[c+1]<>')')and(s[c+1]<>',')and(s[c+2]=')') then                        begin                                if p=false then                                begin                                        p:=true;                                        inc(len);                                        v[len]:=-2;                                end;                        end                end;                if (s[c]<>')')and(s[c]<>'(') then                begin                        inc(len);                        if s[c]=',' then                        begin                                v[len]:=-3;                        end                                else                        begin                                if (s[c-1]<>'(')or(s[c+1]<>')') then                                begin                                        v[len]:=-2;                                        inc(len);                                        v[len]:=t[s[c]];                                        inc(len);                                        v[len]:=-1;                                end                                        else                                begin                                        v[len]:=t[s[c]];                                end;                        end;                end;        end;        while len<>3 do        begin                i:=0;                while i<>len do                begin                        inc(i);                        if (v[i]=-2)and(v[i+1]<>-1)and(v[i+1]<>-2)and(v[i+1]<>-3)and(v[i+2]=-1)and(v[i+3]=-3)and(v[i+4]=-2)and(v[i+5]<>-1)and(v[i+5]<>-2)and(v[i+5]<>-3)and(v[i+6]=-1) then                        begin                                v[i+1]:=1-((1-v[i+1])*(1-v[i+5]));                                for j:=i+3 to len do                                begin                                        v[j]:=v[j+4];                                end;                                dec(len,4);                                //i:=0;                        end;                        if (v[i]=-2)and(v[i+1]<>-1)and(v[i+1]<>-2)and(v[i+1]<>-3)and(v[i+2]=-1)and(v[i+3]=-2)and(v[i+4]<>-1)and(v[i+4]<>-2)and(v[i+4]<>-3)and(v[i+5]=-1) then                        begin                                v[i+1]:=v[i+1]*v[i+4];                                for j:=i+3 to len do                                begin                                        v[j]:=v[j+3];                                end;                                dec(len,3);                                //i:=0;                        end;                        if (v[i]=-2)and(v[i+1]=-2)and(v[i+2]<>-1)and(v[i+2]<>-2)and(v[i+2]<>-3)and(v[i+3]=-1)and(v[i+4]=-1) then                        begin                                v[i+1]:=v[i+2];                                v[i+2]:=-1;                                for j:=i+3 to len do                                begin                                        v[j]:=v[j+2];                                end;                                dec(len,2);                                //i:=0;                        end;                end;        end;        writeln((v[2]+ans):0:4);        close(input);end.


0 0
原创粉丝点击