求助 MLE on #9
查看原帖
求助 MLE on #9
554145
Night_sea_64楼主2023/1/7 21:51

Code:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n;
string s;
double p[30];
double solve(int l,int r)
{
	//cout<<l<<" "<<r<<endl;
    if(l==r)return p[int(s[l]-'A'+1)];
    if(l>r)return 0;
    int cnt=0;
    double x=1;
    bool flag=1;
    //flag=0 表示串联,flag=1 表示并联
    for(int i=l;i<=r;i++)
    {
    	if(s[i]=='(')cnt++;
    	if(s[i]==')')cnt--;
    	if(cnt==0&&s[i]==',')flag=0;
    }
    //cout<<flag<<endl;
    if(flag==0)
    {
    	int last=l;
    	cnt=0;
    	for(int i=l;i<r;i++)
    	{
    		if(s[i]=='(')cnt++;
    		if(s[i]==')')cnt--;
    		if(s[i]==','&&cnt==0)
    		{
    			x*=(1-solve(last,i-1));
            	last=i+1;
    		}
    		//cout<<i<<","<<last<<endl;
    	}
    	x*=(1-solve(last,r));
    	return 1-x;
    }
    else
    {
    	int last=l+1;
    	cnt=0;
    	for(int i=l;i<r;i++)
    	{
    		if(s[i]=='(')cnt++;
    		if(s[i]==')')cnt--;
    		if(s[i]==')'&&s[i+1]=='('&&cnt==0)
    		{
    			x*=solve(last,i-1);
            	last=i+2;
    		}
    		//cout<<i<<","<<last<<endl;
    	}
    	x*=solve(last,r-1);
        return x;
    }
}
int main()
{
    cin>>n>>s;
    for(int i=1;i<=n;i++)cin>>p[i];
    printf("%.4lf\n",solve(0,s.size()-1));
    return 0;
}
2023/1/7 21:51
加载中...