20分求调
查看原帖
20分求调
1285536
zhao__sd楼主2024/7/24 11:45
#include<iostream>
using namespace std;
char fh[100010];
int tops,topf,sz[33340][2];
void pop(){
	int a0,a1;
	if(fh[topf]=='+'){
		a0=sz[tops-1][0]*sz[tops][0]%10007;
		a1=(sz[tops-1][0]*sz[tops][1]+sz[tops-1][1]*sz[tops][1])%10007; 
	}
	else if(fh[topf]=='*'){
		a1=sz[tops-1][1]*sz[tops][1]%10007;
		a0=(sz[tops-1][0]*sz[tops][1]+sz[tops-1][1]*sz[tops][0]+sz[tops-1][0]*sz[tops][0])%10007;
	}
	tops--,topf--;
	sz[tops][0]=a0;
	sz[tops][1]=a1;
}
int main(){
	int L;
	cin>>L;
	char pre='(';
	while(L--){
		char c=getchar();
		if(c!='('&&pre=='('){
			tops++;
			sz[tops][0]=sz[tops][1]=1;
		}
		if(c=='('){
			if(pre=='+'||pre=='*')tops--;
			fh[++topf]=c; 
		}
		else if(c==')'){
			while(fh[topf]!='(')pop();
			topf--;
		}
		else if(c=='+'){
			while(fh[topf]=='+'||fh[topf]=='*')pop();
			fh[++topf]='+';
			tops++;
			sz[tops][0]=sz[tops][1]=1;
		}
		else if(c=='*'){
			while(fh[topf]=='*')pop();
			fh[++topf]='*';
			tops++;
			sz[tops][0]=sz[tops][1]=1;
		} 
		pre=c;
	}
	while(tops>1)pop();
	cout<<sz[1][0]<<endl;
}
2024/7/24 11:45
加载中...