比赛 |
20121109 |
评测结果 |
C |
题目名称 |
表达式的值 |
最终得分 |
0 |
用户昵称 |
苏轼 |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2012-11-09 11:54:17 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,num=1,ans=0,number=1;
string ss,s;
int q[20]={0},w[20]={0};
void dfs(int x);
int main()
{
freopen ("exp.in","r",stdin);
freopen ("exp.out","w",stdout);
cin>>n>>ss;
s="a";
for (int i=0;i<ss.size();i++)
{
if (ss[i]!='('&&ss[i]!=')')
{
s+=ss[i];
s+='a';
num++;
}
}
if (n<=13)
dfs(0);
cout<<ans;
return 0;
}
void dfs(int x)
{
if (x==s.size())
{
number=1;
for (int i=0;i<s.size();i++)
{
if (s[i]=='a')
{
q[1]=w[i];
break;
}
}
for (int i=0;i<s.size();i++)
{
if (s[i]=='+')
{
number++;
q[number]=w[i+1];
}
if (s[i]=='*')
{
q[number]&=w[i+1];
}
}
for (int i=number;i>=2;i--)
{
q[i-1]=q[i]|q[i-1];
}
if (q[1]==0)
ans++;
return;
}
for (int i=x;i<s.size();i++)
{
if (s[i]=='a')
{
w[i]=1;
dfs(i+1);
w[i]=0;
dfs(i+1);
break;
}
}
}