P1310 表达式的值

题解

1.假设有两个布尔变量 x , y 

x0表示使得x=0的方案数

x1表示使得x=1的方案数

y0表示使得y=0的方案数

y1表示使得y=1的方案数

| 按位或 & 按位与
 0 0 -> 0   0 0 -> 0 
 0 1 -> 1  0 1 -> 0
 1 0 -> 1  1 0 -> 0
 1 1 -> 1  1 1 -> 1

then,

x | y=0  方案数为 x0*y0

x | y=1  方案数为 x0*y1+x1*y0+x1*y1

x & y=0  方案数为  x0*y1+x1*y0+x0*y0

x & y=1  方案数为  x1*y1

2.中缀转后缀规则

考虑用栈维护。

遍历中缀表达式:

  1. 遇到数字,直接放入答案序列

  2. 遇到左括号,入栈

  3. 遇到右括号,把栈顶到上一个左括号的元素依次出栈并放入答案序列
  4. 遇到乘号,入栈
  5. 遇到加号,从栈顶开始弹出这段连续的乘号,并放入答案序列,最后加号入栈
  6. 最后把栈里剩下的元素依次放入答案序列

代码

#include<bits/stdc++.h>

using namespace std;

const int mod=1e4+;
const int maxn=1e5+;
int n;
char zhong[maxn]; //输入的中序遍历
stack<char>sta; //栈
string hou; //转化的后缀表达式
stack<int> zero,one; //答案为0的方案数,答案为1的方案数 int main()
{
scanf("%d",&n);
scanf("%s",zhong+); //下标从1开始 hou.push_back('n'); //后缀表达式里一开始要有一个未知数 //中缀转后缀
for(int i=;i<=n;i++)
{
if(zhong[i]=='('||zhong[i]=='*')
sta.push(zhong[i]);
if(zhong[i]=='+')
{
while(!sta.empty()&&sta.top()=='*')
{
hou.push_back(sta.top());
sta.pop();
}
sta.push(zhong[i]);
}
if(zhong[i]==')')
{
while(sta.top()!='(')
{
hou.push_back(sta.top());
sta.pop();
}
sta.pop(); //弹出'('
}
if(zhong[i]!='('&&zhong[i]!=')')
hou.push_back('n'); //放入一个未知变量
} //栈里面剩余的存入后缀
while(!sta.empty())
{
hou.push_back(sta.top());
sta.pop();
} //遍历后缀
for(int i=;i<hou.size() ;i++)
{
char c=hou[i]; if(c=='n')
{
zero.push();
one.push();
}
else
{
int rone=one.top(),rzero=zero.top();
one.pop();
zero.pop();
//rone->y1 , rzero->y0 int lone=one.top(),lzero=zero.top();
one.pop();
zero.pop();
//lone->x1 , lzero->x0 if(c=='*')
{
one.push(lone*rone%mod);
zero.push((lone*rzero%mod+lzero*rone%mod+lzero*rzero%mod)%mod);
}
else
{
one.push((lone*rone%mod+lone*rzero%mod+lzero*rone%mod)%mod);
zero.push(lzero*rzero%mod);
}
}
} printf("%d",zero.top()); //输出答案 return ;
}

Thanks

water-lift

P1310 表达式的值的更多相关文章

  1. 洛谷 P1310 表达式的值 解题报告

    P1310 表达式的值 题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. "× "运算优先于"⊕"运算,即计算表 ...

  2. 洛谷P1310 表达式的值

    P1310 表达式的值 题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. “× ”运算优先于“⊕”运算,即计算表达式时,先计算× 运算,再计算⊕运算.例 ...

  3. 2019.06.17课件:[洛谷P1310]表达式的值 题解

    P1310 表达式的值 题目描述 给你一个带括号的布尔表达式,其中+表示或操作|,*表示与操作&,先算*再算+.但是待操作的数字(布尔值)不输入. 求能使最终整个式子的值为0的方案数. 题外话 ...

  4. 【数据结构】P1310 表达式的值

    [题目链接] https://www.luogu.org/problem/P1310 题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. “× ”运算优先 ...

  5. luogu P1310 表达式的值

    题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. “× ”运算优先于“⊕”运算,即计算表达式时,先计算× 运算,再计算⊕运算.例如:计算表达式A⊕B × ...

  6. 【洛谷P1310 表达式的值】

    题目链接 题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. “× ”运算优先于“⊕”运算,即计算表达式时,先计算× 运算,再计算⊕运算.例如:计算表达式 ...

  7. 洛谷P1310 表达式的值 题解 栈/后缀表达式的应用

    题目链接:https://www.luogu.org/problem/P1310 本题涉及算法:栈.前缀表达式转后缀表达式,动态规划思想. 这道题目我思考了好长时间,第一时间让我做的话我也做不出来. ...

  8. 洛谷P1310 表达式的值——题解

    题目传送 题的难点:1.有运算优先级,不好判断.2.有破坏整体和谐性的讨厌的括号.3.不知道哪里要填数.4.要求方案数很大,搜索不会做呐. 发现难点1和2都是中缀表达式的缺点.转成后缀表达式后难点1. ...

  9. P1981 表达式求值

    P1981 表达式求值 题解 这个题联想一下  P1310 表达式的值  思路就是输入中缀式,转成后缀式,然后按后缀式计算,完美!!       but!! 会严重RE,因为你可能会输入中缀式的时候输 ...

随机推荐

  1. Microsoft Edge设置socks代理

    自已摸的,非官方: 直接修改注册表: REGEDIT4 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Se ...

  2. AD如何改变PCB文件的黑色背景

    第一步:打开AD软件,新建一个PCB文件.   2 第二步:在黑色区域随便画一个封闭的多边形——注意一定要是封闭的!   3 第三步:点击“Ctrl + A”快捷键将PCB整个文件选中.   4 第四 ...

  3. 批处理引擎MapReduce编程模型

    批处理引擎MapReduce编程模型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. MapReduce是一个经典的分布式批处理计算引擎,被广泛应用于搜索引擎索引构建,大规模数据处理 ...

  4. RBF神经网络——直接看公式,本质上就是非线性变换后的线性变化(RBF神经网络的思想是将低维空间非线性不可分问题转换成高维空间线性可分问题)

    Deeplearning Algorithms tutorial 谷歌的人工智能位于全球前列,在图像识别.语音识别.无人驾驶等技术上都已经落地.而百度实质意义上扛起了国内的人工智能的大旗,覆盖无人驾驶 ...

  5. python算法与数据结构-选择排序算法(33)

    一.选择排序的介绍 选择排序(Selection sort)是一种简单直观的排序算法.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素, ...

  6. K8s中的多容器Pod和Pod内容器间通信

    容器(Container)常被用来解决比如微服务的单个问题,但在实际场景中,问题的解决往往需要多容器方案.本文会讨论将多个容器整合进单个Kubernetes Pod 中,以及Pod中的容器之间是如何通 ...

  7. 5、Hadoop 2.6.5 环境搭建

    下载 地址:http://archive.apache.org/dist/hadoop/common/ sudo wget http://archive.apache.org/dist/hadoop/ ...

  8. gosched

    Go语言runtime.Gosched()函数浅析 这个函数的作用是让当前goroutine让出CPU,好让其它的goroutine获得执行的机会.同时,当前的goroutine也会在未来的某个时间点 ...

  9. shiro授权+注解式开发

    shiro授权和注解式开发 1.shiro授权角色.权限 2.Shiro的注解式开发 ShiroUserMapper.xml <select id="getRolesByUserId& ...

  10. Reed-Solomon纠错码的译码

    其中用到了等比数列展开:1/(1-\alpha).  此时,似乎应该将\alpha视为模远小于1的复数. 只有这样,\alpha^i 才能作为一个有限域中的元素展开.它在一个半径小于1的圆上,由若干具 ...