比赛 |
20121109 |
评测结果 |
AAAAAAAAAA |
题目名称 |
表达式的值 |
最终得分 |
100 |
用户昵称 |
日光。 |
运行时间 |
0.073 s |
代码语言 |
C++ |
内存使用 |
3.37 MiB |
提交时间 |
2012-11-09 11:54:51 |
显示代码纯文本
#include<fstream>
#include<stack>
using namespace std;
char text[100010];
int len;
stack<int> s0,s1;
stack<int> sc;
int main()
{
ifstream fin("exp.in");
ofstream fout("exp.out");
fin>>len;
fin>>text;
while(!s0.empty()) s0.pop();
while(!s1.empty()) s1.pop();
while(!sc.empty()) sc.pop();
text[len++]=')';
text[len]='\0';
sc.push('(');s0.push(1);s1.push(1);
int i=0;
while(i<len)
{
if(sc.top()=='('&&text[i]==')')
{
sc.pop();
i++;
}
else
{
if((sc.top()=='('&&text[i]!=')')||(sc.top()=='*'&&text[i]=='(')||(sc.top()=='+'&&(text[i]=='('||text[i]=='*')))
{
sc.push(text[i]);
if (text[i]!='(')
{
s0.push(1);
s1.push(1);
}
i++;
}
else
{
if(!((sc.top()=='('&&text[i]!=')')||(sc.top()=='*'&&text[i]=='(')||(sc.top()=='+'&&(text[i]=='('||text[i]=='*'))))
{
int a0=s0.top(),a1=s1.top(),rec0,rec1;
s0.pop();s1.pop();
int b0=s0.top(),b1=s1.top();
s0.pop();s1.pop();
char ch=sc.top();
sc.pop();
if(ch=='+')
{
rec0=a0*b0%10007;
rec1=(a1*b0%10007+a0*b1%10007+a1*b1%10007)%10007;
}
else
{
rec1=a1*b1%10007;
rec0=(a1*b0%10007+a0*b1%10007+a0*b0%10007)%10007;
}
s0.push(rec0);
s1.push(rec1);
}
}
}
}
fout<<s0.top()<<endl;
return 0;
}