50WA求救
查看原帖
50WA求救
623671
sluckystar楼主2023/4/1 19:33
#include<bits/stdc++.h>
using namespace std;
struct M_pair{
	int a,b;
};
const int p=10007;
char str[100002]="";
int c1[100001]={},c2[100001]={},d1[100001]={},d2[100001]={},n=0;
M_pair dfs(int l,int r);
int main(){
	scanf("%d",&n);
	scanf("%s",str+1);
	int tmp=0;
	for(int i=1;i<=n;i++){
		if(str[i]=='('){
			tmp++;
		}
		else{
			if(str[i]==')'){
				tmp--;
			}
			else{
				if(str[i]=='+'){
					c1[tmp]=i;
				}
				else{
					if(str[i]=='*'){
						c2[tmp]=i;
					}
				}
			}
		}
		d1[i]=c1[tmp];
		d2[i]=c2[tmp];
	}
	M_pair ans=dfs(1,n);
	printf("%d\n",ans.a);
	return 0;
}
M_pair dfs(int l,int r){
	M_pair ans={};
	if(l>r){
		ans.a=1;
		ans.b=1;
		return ans;
	}
	if(d1[r]>=l){
		M_pair tl=dfs(l,d1[r]-1),tr=dfs(d1[r]+1,r);
		ans.a=(tl.a*tr.a)%p;
		ans.b=((tl.a*tr.b)%p+(tl.b*tr.a)%p+(tl.b,tr.b)%p)%p;
		return ans;
	}
	if(d2[r]>=l){
		M_pair tl=dfs(l,d2[r]-1),tr=dfs(d2[r]+1,r);
		ans.a=((tl.a*tr.a)%p+(tl.a*tr.b)%p+(tl.b*tr.a)%p)%p;
		ans.b=(tl.b*tr.b)%p;
		return ans;
	}
	if(str[l]=='('&&str[r]==')'){
		return dfs(l+1,r-1);
	}
	//assert(false);
	return ans;
}
2023/4/1 19:33
加载中...