社区讨论
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 条回复,欢迎继续交流。
正在加载回复...