rt,思路见 https://luogu.com.cn/blog/250940/solution-p2413
代码如下:
#include<bits/stdc++.h>
using namespace std;
string s;
int lq,rq,ck,n;
double a[30];
struct node
{
int le,ri;
double val;
}kuai[100005];
double chuli(int r1,int r2)//r1到r2号块的最终值
{
double ans=kuai[r1].val;
for(int i=r1+1;i<=r2;i++)
{
if(s[kuai[i].ri+1]=='(') ans*=kuai[i].val;//并联
else ans=ans+kuai[i].val-ans*kuai[i].val;//串联
}
return ans;
}
double dfs(int l,int r)
{
bool flg=0;
int pre=l;
int prvck=ck;
double ans;
if(l==r) return a[s[l]-'A'];
else for(int j=l;j<=r;j++)
{
if(s[j]=='(') lq++,flg=1;
else if(s[j]==')') rq++,flg=1;
if(lq==rq&&flg)
{
kuai[++ck].le=pre;
kuai[ck].ri=j;
kuai[ck].val=dfs(pre,j);
pre=j+1;
}
}
ans=chuli(prvck+1,ck);
ck=prvck;//相当于回溯吧
return ans;
}
int main()
{
cin>>n>>s;
for(int i=1;i<=n;i++) cin>>a[i];
cout<<dfs(0,s.size()-1);
return 0;
}
请问哪里出错了,输入后是死机