csp2020——T3表达式
后缀表达式基本可以使用栈来表达,所以30分的暴力做法很好做
正解的做法是:
暴力的做法是每次重新建立栈,用符号来把栈顶的元素弹出来,做完运算之后再放入栈中,如果是与运算,弹出两个元素,如果是或运算,弹出两个元素,如果是非运算,弹出一个元素,做完运算之后再将其放入栈中,最后栈里面只有一个元素。
题目中要求只改变一个元素的值,改变的方法是取反,而且我们发现,根据不同的运算符号x@y:
如果@是&,如果x为0的话,y无论是什么,都无法改变最终的结果,所以y的值无论取反还是原值,都无法改变最终的结果
如果@是|,如果x为1的话,y无论是什么,都无法改变最终的结果,所以y的值无论取反还是原值,都无法改变最终的结果
所以我们能够找出哪些值是无用的值,哪些是有用的值,改变无用的值不会影响最终的结果,改变有用的值,在其他值都不变的情况下,最终结果会取反
所以我们考虑能否建立一个表达式树?我们把所有的符号都编号,编号为大于n,如果遇到符号,弹出栈顶的元素,作为他的左儿子和右儿子(如果是双目运算符的话),如果是非运算,只弹出一个栈顶元素即可。这样的话,就能建立一个表达式树。
dfs一遍表达式树,如果遇到编号小于n的,就是递归边界,最后返回到根节点的结果就是最终答案,在dfs的时候同时可以记录哪些节点是无用的节点
在一遍dfs之后会发现,我们可能会把某些符号标记成了无用的节点,此时我们发现,如果一个节点成为了无用的节点,那么他子树上所有的节点都变成了无用的节点。可以dfs就行标记,标记结束之后,我们就会发现,表达式树上只会存在一些有用的节点,这些节点一旦取反,最终答案一定会取反,所以q次询问可以o(1)的回答
csp2020——T3表达式的更多相关文章
- 河南省第四届ACM省赛(T3) 表达式求值
表达式求值 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min ...
- CSP-J 2020题解
CSP-J 2020题解 本次考试还是很有用的,至少把我浇了一盆冷水. 当使用民间数据自测的时候,我就自闭了. 估分是320,但有些比较低级的错误直接少掉80. 而且这套题应该上350才正常吧,也不是 ...
- CSP2020复赛游记
CSP2020复赛游记 由于本蒟蒻侥幸通过PJ和TG的分数线并且侥幸的拿了一等,所以侥幸的来参加复赛 11.04~11.05 期中考,挂 11.06 对答案,炸 11.07 开始了第一次CSP复赛 坐 ...
- java web学习总结(三十一) -------------------EL表达式
一.EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数 ...
- java web学习总结(三十) -------------------JSTL表达式
一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心 ...
- 委托、Lambda表达式和事件
1.1 引用方法 委托是寻址方法的 .NET 版本.委托是类型安全的类.它定义了返回类型和参数的类型.委托类不仅包含对方法的引用,也可以包含对多个方法的引用. Lambda 表达式 ...
- 每日代码 - 6/26 lambda表达式
public class CartViewRender { public static CartView renderMyCartView(Cart cart){ ErrorCodeEnum erro ...
- el表达式的function标签
使用el调用Java方法 1:EL表达式语法允许开发人员开发自定义函数,以调用java类的方法. ~示例:${el:method(params)} ~在EL表达式中调用的只能是java类的静态方法. ...
- C# 匿名委托、匿名方法、匿名对象、Lambda表达式
一.匿名类型可通过使用 new 运算符和对象初始值创建匿名类型.示例:var v = new { Name = "Micro", Message = "Hello&quo ...
- spring AspectJ的Execution表达式
Aspectj切入点语法定义 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义切入点表达式 execu ...
随机推荐
- dot & pixel & point
dpi(dot per inch): 出版质量一般要求dpi在300-600之间. 100dpi = 39.37dpc(dot per cm) 在显示屏幕上,dot=pixel,对于100dpi分辨率 ...
- 排查问题-输出pojo日志,尽量用json
背景: 下午在做一个前后端md5加密签名校验. 前端用参数A,B,C,经过MD5加密函数,得到签名D. 然后前端带着ABCD一块来到后端. 同样的,后端拿到请求后,用MD5函数对ABC进行加密,得到签 ...
- 01-搭建小巧完善的Kubernetes环境
安装Docker Docker安装和基础命令 安装Minikube minkkube start 安装minikube curl -LO https://storage.googleapis.com/ ...
- 两行CSS让页面提升了近7倍渲染性能
参考:https://juejin.cn/post/7168629736838463525 content-visibility.contain-intrinsic-size属性
- vue中如何在子组件添加类似于watch属性监听父组件数据,数据变化时子组件做出相应的动作
首先:我们需要在父组件中标签中定义一个 ref="parentObjVue" 其次:我们在子组件中,通过 var tmp=this.$refs.parentObjVue找到父组件 ...
- 使用navicat进行数据传输报错ERROR: permission denied for table xxx
数据库我使用的是pgsql,在进行数据传输时报错ERROR: permission denied for table demo1,这里的原因是权限问题哦,所以可以给定当前用户更大权限,我这里则是直接切 ...
- Codeforces 1228A、Distinct Digits
原题 原题网址 题目大意 给定一个区间(上下界都是整数),判断该区间内是否存在一个整数的数字两两不同. 数据结构 一个数组flag,记录0-9是否出现过. 思路 外层循环枚举该区间内所有整数. 首先初 ...
- XCZU19EG板卡设计资料:610-基于6U VPX 的FPGA XCZU19EG存储阵列
基于6U VPX 的FPGA XCZU19EG存储阵列 一.板卡概述 高性能存储板基于标准6U VPX架构,是基于Xilinx UltraScale+ 系列FPGA XCZU19EG架 ...
- VUE学习-插槽
插槽 匿名插槽 子组件设置匿名插槽 <script type="text/x-template" id="custom-comp"> <div ...
- python实现Excel的表头与索引之间的转换
字母转数字 def get_index(capital): """ 大写字母(Excel列头)转索引 :param capital: 'A' --> 0, 'AA' ...