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