比赛 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;
}