- 表达式的值
- 2016-08-23 09:30:25 @
// input code here
#include<bits/stdc++.h>
#define maxn 100000
#define mod 10007
using namespace std;
char ss[maxn+100],s[maxn+100];
int l,top,a[maxn+100],b[maxn+100];
void add()
{
int k,k0,k1;
k=a[0];
k0=a[k-1]*a[k];
k1=a[k-1]*b[k]+b[k-1]*a[k]+b[k-1]*b[k];
a[--a[0]]=k0%mod,b[a[0]]=k1%mod;
}
void multiply()
{
int k,k0,k1;
k=a[0];
k0=a[k-1]*a[k]+a[k-1]*b[k]+b[k-1]*a[k];
k1=b[k-1]*b[k];
a[--a[0]]=k0%mod,b[a[0]]=k1%mod;
}
int main()
{
int i,j,k;
char tmp;
scanf("%d%s\n",&l,ss);
a[0]=b[0]=top=0;
for(i=0; i<l; i++)
{
tmp=ss[i];
switch(tmp)
{
case '(':
s[++top]=tmp;
break;
case '+':
{
if(i==0 || (i>0 && ss[i-1]!=')'))
a[++a[0]]=1,b[a[0]]=1;
while(top>0 && s[top]!='(')
{
if(s[top]=='+')add();
else multiply();
top--;
}
s[++top]=tmp;
break;
}
case '*':
{
if((i>0 && ss[i-1]!=')') || i==0)
a[++a[0]]=1,b[a[0]]=1;
while(top>0 && s[top]=='*')
multiply(),top--;
s[++top]=tmp;
break;
}
default:
{
if(ss[i-1]!=')')
a[++a[0]]=1,b[a[0]]=1;
while(s[top]!='(')
{
if(s[top]=='+')add();
else multiply();
top--;
}
top--;
break;
}
}
}
if(top>0 && ss[l-1]!=')')
a[++a[0]]=1,b[a[0]]=1;
while(top>0)
{
if(s[top]=='+')add();
else multiply();
top--;
}
if(l==0)printf("%d\n",1);
else printf("%d\n",a[a[0]]);
return 0;
}
0 条评论
目前还没有评论...
信息
- ID
- 1808
- 难度
- 6
- 分类
- (无)
- 标签
- 递交数
- 750
- 已通过
- 214
- 通过率
- 29%
- 被复制
- 14
- 上传者