首页 技术 正文
技术 2022年11月11日
0 收藏 765 点赞 3,454 浏览 1482 个字

题目描述

对于1 位二进制变量定义两种运算:

luogu P1310 表达式的值

运算的优先级是:

  1. 先计算括号内的,再计算括号外的。

  2. “× ”运算优先于“⊕”运算,即计算表达式时,先计算× 运算,再计算⊕运算。例如:计算表达式A⊕B × C时,先计算 B × C,其结果再与 A 做⊕运算。

现给定一个未完成的表达式,例如_+(_*_),请你在横线处填入数字0 或者1 ,请问有多少种填法可以使得表达式的值为0 。

输入输出格式

输入格式:

输入文件名为exp.in ,共 2 行。

第1 行为一个整数 L,表示给定的表达式中除去横线外的运算符和括号的个数。

第2 行为一个字符串包含 L 个字符,其中只包含’(’、’)’、’+’、’*’这4 种字符,其中’(’、’)’是左右括号,’+’、’*’分别表示前面定义的运算符“⊕”和“×”。这行字符按顺序给出了给定表达式中除去变量外的运算符和括号。

输出格式:

输出文件exp.out 共1 行。包含一个整数,即所有的方案数。注意:这个数可能会很大,请输出方案数对10007 取模后的结果。

输入输出样例

输入样例#1: http://wenku.baidu.com/link?url=jvyUVTTGFC27LnlHkzQ0OObqeBFDwCYvuCbiHHG5CaPXrjFiGoBtiLhdfNIhW1vHNNZ-Umb_zTKnCOQK3WTw0N8KRQT8m2lfBBMsHpoIChC

                        #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int N=,MOD=;
int n;
char s[N];
struct node{
int l,r;
char op;
}tree[N];
int cnt=,w[N],root=;
void build(){
int p=,cnt=;
for(int i=;i<=n;i++){
if(s[i]=='(') p++;if(s[i]==')') p--;
if(s[i]=='+') {w[++cnt]=p*+;
tree[cnt].op=s[i];
}
if(s[i]=='*') w[++cnt]=p*+,tree[cnt].op=s[i];;
}
int st[N],k,top=-;
for(int i=;i<=cnt;i++) {
k=top;
while(k>=&&w[st[k]]>w[i]) k--;
if(k!=-)tree[st[k]].r=i;
if(k<top) tree[i].l=st[k+];
st[++k]=i;
top=k;
}
root=st[];
}
int f[N][];
void dp(int i) {
if(i==) return;
if(f[i][]!=) return;
int l=tree[i].l,r=tree[i].r;char op=tree[i].op;
dp(l);dp(r);
if(op=='+'){
f[i][]=f[l][]*f[r][];
f[i][]=f[l][]*f[r][]+f[l][]*f[r][]+f[l][]*f[r][];
}
if(op=='*'){
f[i][]=f[l][]*f[r][];
f[i][]=f[l][]*f[r][]+f[l][]*f[r][]+f[l][]*f[r][];
}
f[i][]%=MOD;f[i][]%=MOD;
}
int main() {
scanf("%d",&n);
scanf("%s",s+);
build();
f[][]=f[][]=;
dp(root);
printf("%d",f[root][]%MOD);
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,564
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,412
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,185
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905