社区讨论

20分求调

P1310[NOIP 2011 普及组] 表达式的值参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lyzaz880
此快照首次捕获于
2024/07/24 11:46
2 年前
此快照最后确认于
2024/07/24 13:15
2 年前
查看原帖
CPP
#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;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...