1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| #include<algorithm> #include<iostream> #include<iomanip> #include<cstring> #include<cstdlib> #include<vector> #include<cstdio> #include<cmath> #include<queue> using namespace std;
inline const int Get_Int() { int num=0,bj=1; char x=getchar(); while(x<'0'||x>'9') { if(x=='-')bj=-1; x=getchar(); } while(x>='0'&&x<='9') { num=num*10+x-'0'; x=getchar(); } return num*bj; }
double n,a[15];
double Cal(string s) { double last=0,ans=0; int bj=0; if(s.length()==2&&s[0]=='R')return a[s[1]-'0']; for(int i=0; i<s.length(); i++) { if(s[i]=='(') { int sum=1; for(int j=i+1; j<s.length(); j++) { if(s[j]=='(')sum++; if(s[j]==')')sum--; if(sum==0) { last=Cal(s.substr(i+1,j-i-1)); i=j; break; } } } else if(s[i]=='R') { last=a[s[i+1]-'0']; i++; } else if(s[i]=='-') { bj=1; ans+=last; } else if(s[i]=='|') { bj=2; ans+=1/last; } } if(bj==1)return ans+last; else if(bj==2) return 1/(ans+1/last); else return last; }
int main() { n=Get_Int(); for(int i=1; i<=n; i++)scanf("%lf",&a[i]); char s[505]; scanf("%s",s); printf("%0.5lf\n",Cal(s)); return 0; }
|