比赛 20121109 评测结果 EEEEEEEEEE
题目名称 表达式的值 最终得分 0
用户昵称 Makazeu 运行时间 0.741 s
代码语言 C++ 内存使用 3.28 MiB
提交时间 2012-11-09 11:59:31
显示代码纯文本
/*
 * Problem : exp
 * Contest : NOIP2011
 */
#include <stack>
#include <cstdio>
#include <string>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int MOD=10007;
stack<int> sum[2],op;
string expr;int len;

inline int priorty(char c)
{
	return ((c=='+')?1:2);
}

int main()
{
	freopen("exp.in","r",stdin);
	freopen("exp.out","w",stdout);
	cin>>len>>expr;
	sum[0].push(1);sum[1].push(1);
	int a[2],b[2],t[2],tpr,top;
	op.push(999); 
	for(int i=0;i<=len-1;i++)
	{
		tpr=priorty(expr[i]);
		if(tpr<op.top())
		{
			op.push(tpr);
			sum[0].push(1);
			sum[1].push(1);
			continue;
		}
		top=op.top(); op.pop();
		a[0]=sum[0].top();sum[0].pop();
		b[0]=sum[0].top();sum[0].pop();
		a[1]=sum[1].top();sum[1].pop();
		b[1]=sum[1].top();sum[1].pop();
		if(top==1)
		{
			t[0]=(a[0]*b[0])%MOD;
			t[1]=((a[0]*b[1])%MOD+
				  (a[1]*b[1])%MOD+
				  (a[1]*b[0])%MOD)%MOD;
		}
		if(top==2)
		{
			t[1]=(a[1]*b[1])%MOD;
			t[0]=((a[0]*b[0])%MOD+
				  (a[0]*b[1])%MOD+
				  (a[1]*b[0])%MOD)%MOD;
		}
		sum[0].push(t[0]);
		sum[1].push(t[1]);
		op.push(tpr);
	}
	sum[1].push(1); sum[0].push(1);
		top=op.top(); op.pop();
		a[0]=sum[0].top();sum[0].pop();
		b[0]=sum[0].top();sum[0].pop();
		a[1]=sum[1].top();sum[1].pop();
		b[1]=sum[1].top();sum[1].pop();
		if(top==1)
		{
			t[0]=(a[0]*b[0])%MOD;
			t[1]=((a[0]*b[1])%MOD+
				  (a[1]*b[1])%MOD+
				  (a[1]*b[0])%MOD)%MOD;
		}
		if(top==2)
		{
			t[1]=(a[1]*b[1])%MOD;
			t[0]=((a[0]*b[0])%MOD+
				  (a[0]*b[1])%MOD+
				  (a[1]*b[0])%MOD)%MOD;
		}
		sum[0].push(t[0]);
		sum[1].push(t[1]);
	printf("%d\n",sum[0].top());
	return 0;
}