比赛 |
防止颓废的小练习v0.15 |
评测结果 |
AAAAAAAAAA |
题目名称 |
表达式的值 |
最终得分 |
100 |
用户昵称 |
Kulliu |
运行时间 |
0.024 s |
代码语言 |
C++ |
内存使用 |
2.29 MiB |
提交时间 |
2016-10-17 21:00:47 |
显示代码纯文本
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
const int maxn=150010,mod=10007;
char s[maxn*2],t[maxn*2],now[maxn*2],c;
int lenn,lent,len,num,n;
int f[maxn][2];
void jrz()
{
while(now[lenn]=='+'||now[lenn]=='*')t[++lent]=now[lenn--];
now[++lenn]='+';
}
void crz()
{
while(now[lenn]=='*')t[++lent]=now[lenn--];
now[++lenn]='*';
}
void kcz()
{
while(now[lenn]!='(')t[++lent]=now[lenn--];
lenn--;
}
void pluss()
{
f[num][1]=(f[num][0]*f[num+1][1]+f[num][1]*f[num+1][0]+f[num][1]*f[num+1][1])%mod;
f[num][0]=(f[num][0]*f[num+1][0])%mod;
}
void cheng()
{
f[num][0]=(f[num][0]*f[num+1][1]+f[num][1]*f[num+1][0]+f[num][0]*f[num+1][0])%mod;
f[num][1]=(f[num][1]*f[num+1][1])%mod;
}
void change()
{
now[0]='(';lenn=0;lent=-1;
for(int i=0;i<=len;i++)
{
if(s[i]=='_')t[++lent]='_';
if(s[i]=='+')jrz();
if(s[i]=='*')crz();
if(s[i]=='(')now[++lenn]='(';
if(s[i]==')')kcz();
}
kcz();
}
void work()
{
num=0;
for(int i=0;i<=lent;i++)
{
if(t[i]=='_')
{
num++;
f[num][0]=1;f[num][1]=1;
}
if(t[i]=='+')num--,pluss();
if(t[i]=='*')num--,cheng();
}
}
int main()
{
freopen("exp.in","r",stdin);
freopen("exp.out","w",stdout);
scanf("%d",&n);
c=getchar();c=getchar();
len=-1;
if(c!='(')s[0]='_',len=0;
s[++len]=c;
for(int i=2;i<=n;i++)
{
c=getchar();
if(c!='('&&s[len]!=')')s[++len]='_';
s[++len]=c;
}
if(c!=')')s[++len]='_';
change();
work();
printf("%d",f[1][0]);
return 0;
}