洛谷P8815:逻辑表达式 ← CSP-J 2022 复赛第3题
【题目来源】
https://www.luogu.com.cn/problem/P8815
https://www.acwing.com/problem/content/4733/
【题目描述】
逻辑表达式是计算机科学中的重要概念和工具,包含逻辑值、逻辑运算、逻辑运算优先级等内容。
在一个逻辑表达式中,元素的值只有两种可能:0 (表示假)和 1 (表示真)。
元素之间有多种可能的逻辑运算,本题中只需考虑如下两种:
“与”(符号为&
)和“或”(符号为|
)。
其运算规则如下:
0&0 = 0&1 = 1&0 = 0,1&1 = 1;
0|0 = 0,0|1 = 1|0 = 1|1 = 1。
在一个逻辑表达式中还可能有括号。
规定在运算时,括号内的部分先运算;两种运算并列时,&
运算优先于 |
运算;同种运算并列时,从左向右运算。
比如,表达式 0|1&0
的运算顺序等同于 0|(1&0)
;表达式 0&1&0|1
的运算顺序等同于 ((0&1)&0)|1
。
此外,在 C++ 等语言的有些编译器中,对逻辑表达式的计算会采用一种“短路”的策略。
在形如 a&b
的逻辑表达式中,会先计算 a 部分的值,如果 a=0a=0,那么整个逻辑表达式的值就一定为 0,故无需再计算 b 部分的值;同理,在形如 a|b
的逻辑表达式中,会先计算 a 部分的值,如果 a=1a=1,那么整个逻辑表达式的值就一定为 1,无需再计算 b 部分的值。
现在给你一个逻辑表达式,你需要计算出它的值,并且统计出在计算过程中,两种类型的“短路”各出现了多少次。
需要注意的是,如果某处“短路”包含在更外层被“短路”的部分内则不被统计,如表达式 1|(0&1)
中,尽管 0&1
是一处“短路”,但由于外层的 1|(0&1)
本身就是一处“短路”,无需再计算 0&1
部分的值,因此不应当把这里的 0&1
计入一处“短路”。
【输入格式】
输入共一行,一个非空字符串 s 表示待计算的逻辑表达式。
【输出格式】
输出共两行,第一行输出一个字符 0 或 1,表示这个逻辑表达式的值;第二行输出两个非负整数,分别表示计算上述逻辑表达式的过程中,形如 a&b
和 a|b
的“短路”各出现了多少次。
【数据范围】
设 |s| 为字符串 s 的长度。
对于所有数据,1≤|s|≤10^6。保证 s 中仅含有字符 0
、1
、&
、|
、(
、)
且是一个符合规范的逻辑表达式。
保证输入字符串的开头、中间和结尾均无额外的空格。
保证 s 中没有重复的括号嵌套(即没有形如 ((a))
形式的子串,其中 a
是符合规范的逻辑表达式)。
其中:
特殊性质 1 为:保证 s 中没有字符 &
。
特殊性质 2 为:保证 s 中没有字符 |
。
特殊性质 3 为:保证 s 中没有字符 (
和 )
。
【输入输出样例】
输入样例1:
0&(1|0)|(1|1|1&0)
输出样例1:
1
1 2
样例1解释
该逻辑表达式的计算过程如下,每一行的注释表示上一行计算的过程:
0&(1|0)|(1|1|1&0)
=(0&(1|0))|((1|1)|(1&0)) //用括号标明计算顺序
=0|((1|1)|(1&0)) //先计算最左侧的&,是一次形如a&b的“短路”
=0|(1|(1&0)) //再计算中间的|,是一次形如a|b的“短路”
=0|1 //再计算中间的|,是一次形如a|b的“短路”
=1
输入样例2:
(0|1&0|1|1|(1|1))&(0&1&(1|0)|0|1|0)&0
输出样例2:
0
2 3
【提示】
以下给出一个“符合规范的逻辑表达式”的形式化定义:
● 字符串 0 和 1 是符合规范的;
● 如果字符串 s 是符合规范的,且 s 不是形如 (t) 的字符串(其中 t 是符合规范的),那么字符串 (s) 也是符合规范的;
● 如果字符串 a 和 b 均是符合规范的,那么字符串 a&b、a|b 均是符合规范的;
● 所有符合规范的逻辑表达式均可由以上方法生成。
【算法分析】
● 利用分治法求解。
● 从下标 1 处开始输入字符串的一种 C++ 语法:scanf(“%s“,str+1);。完整应用代码如下:
#include <bits/stdc++.h>
using namespace std;const int N=1e5+5;
char str[N];int main() {scanf("%s",str+1); //从s的首地址+1开始输入int len=strlen(str+1);cout<<len<<endl;for(int i=1; i<=len; i++) cout<<str[i]<<" ";return 0;
}/*
in:
abcdeout:
5
a b c d e
*/
【算法代码】
#include <bits/stdc++.h>
using namespace std;const int N=1e6+5;
char str[N];
/*
lor[x] 代表在第 x 层括号内的最后一个 | 运算符的下标
lnd[x] 代表在第 x 层括号内的最后一个 & 运算符的下标
cor[i] 代表当前和 i 同层的最后一个 | 运算符的下标
cnd[i] 代表当前和 i 同层的最后一个 & 运算符的下标
*/
int lor[N],lnd[N],cor[N],cnd[N];
int cnt_and,cnt_or;int dfs(int le,int ri) {if(cor[ri]>=le) {int ans=dfs(le,cor[ri]-1);if(ans==1) {cnt_or++;return 1;}return (ans|dfs(cor[ri]+1,ri));}if(cnd[ri]>=le) {int ans=dfs(le,cnd[ri]-1);if(ans==0) {cnt_and++;return 0;}return(ans&dfs(cnd[ri]+1,ri));}if(str[le]=='(' && str[ri]==')') {return dfs(le+1,ri-1);}return str[le]-'0';
}int main() {scanf("%s",str+1); //从s的首地址+1处开始输入字符串int len=strlen(str+1);int x=0; //括号层数for(int i=1; i<=len; i++) {if(str[i]=='(') x++;else if(str[i]==')') x--;else if(str[i]=='|') lor[x]=i;else if(str[i]=='&') lnd[x]=i;cor[i]=lor[x];cnd[i]=lnd[x];}int ans=dfs(1,len);printf("%d\n",ans);printf("%d %d\n",cnt_and,cnt_or);return 0;
}/*
in1:
0&(1|0)|(1|1|1&0)
out1:
1
1 2in2:
(0|1&0|1|1|(1|1))&(0&1&(1|0)|0|1|0)&0
out2:
0
2 3
*/
【参考文献】
https://www.luogu.com.cn/problem/solution/P8815
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/243853e47fe357175314558782dda209.png)
洛谷P8815:逻辑表达式 ← CSP-J 2022 复赛第3题
【题目来源】https://www.luogu.com.cn/problem/P8815https://www.acwing.com/problem/content/4733/【题目描述】 逻辑表达式是计算机科学中的重要概念和工具,包含逻辑值、逻辑运算、逻辑运算优先级等内容。 在一个逻辑表达式中,元素的值只有两种可能&a…...
![](https://img-blog.csdnimg.cn/cecbd49791344fe1b2f9552367d09e6d.png)
ElementUI实现登录注册+axios全局配置+CORS跨域
一、搭建项目 1.1 安装 Element-UI 先确保是否安装了vue-cli脚手架工具 !!! 安装vue脚手架可以看看我的上一篇博客 构建好项目后通过npm安装element-ui cd 项目根路径 #进入新建项目的根目录 npm install element-ui -S #安装…...
![](https://www.ngui.cc/images/no-images.jpg)
Vue 07 Vue中的数据代理
通过数据代理,我可以方便的使用vm.属性,修改data中的属性 什么是数据代理 数据代理:通过一个对象代理对另一个对象中属性的操作(读/写) 我们修改obj2的x属性,其实修改的是obj的x属性 <!DOCTYPE html&…...
![](https://img-blog.csdnimg.cn/3f1eeb8a2cbc4deeaede054b32c9186a.png)
Foxit PDF SDK Windows 9.1 Crack
Foxit PDF SDK 变更日志 Windows/Linux/Mac 2023 年 8 月 新功能/增强功能 在开始签名之前设置外观。支持使用共享字典添加签名。允许在调用 Signature::StartSign() 之前增量保存文档。在签名前修改现有未签名分页印章签名的外观。支持使用共享字典添加分页签名。忽略全角…...
![](https://img-blog.csdnimg.cn/4be4c31a5dc549ccb8b30a062b1a1526.png)
UG NX二次开发(C++)-采用NXOpen方法计算体的质心
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、创建一个part文件3、测量质心的NXOpen方法3.1 方法说明3.2 质心测量的代码3.3 测试结果1、前言 在UG NX二次开发过程中,测量是一个很必要的功能,比如测量距离、角度、面的体积、边长、…...
![](https://img-blog.csdnimg.cn/54d176004f2e44fb886fc21e803bb1f0.png)
Java代码审计17之fastjson反序列化漏洞(2)
文章目录 1、类加载与反射调用1.1、类加载1.2、测试代码1.3、通过类的加载和反射调用evil类 2、Fastjson TemplatesImpl链调试2.1、链路总览2.2、调试构造利用链 3、fastjson反序列化TemplatesImpl 利⽤3.1、开启 Feature.SupportNonPublicField 得作用3.2、构造利用payload3.3…...
![](https://www.ngui.cc/images/no-images.jpg)
Fork/Join 框架是干什么的?
Fork/Join框架是Java中用于并行计算的一个重要工具,它旨在简化多线程编程,特别适用于分治任务的并行执行。Fork/Join框架的主要目标是提高多核处理器上任务的并行性,从而加速计算。 Fork/Join框架的核心概念包括以下几个要点: 分治策略:Fork/Join框架基于分治策略,将一个…...
![](https://img-blog.csdnimg.cn/5ea991b5e6a747e2b9bc4d6815393863.png)
电子信息工程专业课复习知识点总结:(五)通信原理
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 第一章通信系统概述——通信系统的构成、各部分性质、性能指标1.通信系统的组成?2.通信系统的分类?3.调制、解调是什么?有什么用…...
![](https://img-blog.csdnimg.cn/6d8a836a47944a448afcfb6faedd71f2.png)
LeetCode算法二叉树—二叉树的中序遍历
目录 94. 二叉树的中序遍历 - 力扣(LeetCode) 代码: 运行结果: 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2]示例 2&am…...
![](https://img-blog.csdnimg.cn/c334df1a64764cda9192a4222913f241.png)
ubuntu 18.04 中 eBPF samples/bpf 编译
1. history 信息 一次成功编译 bpf 后执行 history 得到的信息: yingzhiyingzhi-Host:~/ex/ex_kernel/linux-5.4$ history1 ls2 mkdir ex3 cd ex4 mkdir ex_kernel5 ls /boot/6 sudo apt install linux-source7 ls /usr/src/8 uname -r9 cd ex_kernel/10…...
![](https://img-blog.csdnimg.cn/2697ced04904454ca08480204bedc755.png)
新版Chromedriver在哪下载(Chromedriver 116.0.5845.188的寻找之旅)
不知道什么时候Chrome自动升级到116.0.5845.188了,害得我原来的Chromedriver 114无法使用了,无奈之下只好重新去下载。 可寻遍网络,都没找到Chromedriver116的版本。网上大多网友给的下载网址是chromedriver.storage.googleapis.com/index.ht…...
![](https://www.ngui.cc/images/no-images.jpg)
React基础知识点
1、简述什么是React(概念)? React是Facebook开发的一款用于构建用户界面的JS库。React一般被采用作为MVC中的V层,它不依赖其他任何的库,因此在开发中,可以与任何其他的库集成使用,包括Jquery等…...
![](https://img-blog.csdnimg.cn/367cdd0d243444058b4853241f4f1327.png)
linux用户和权限命令学习记录
文章目录 版权声明root用户(超级管理员)su和exit命令sudo命令为普通用户配置sudo认证 用户、用户组管理用户组管理getent命令 查看权限控制认知权限信息 修改权限控制chmod修改文件、文件夹的权限权限的数字序号chown修改所属用户、用户组 版权声明 本博…...
![](https://img-blog.csdnimg.cn/0a2896de137a4b998f6947ea0bcaafc3.png)
React(react18)中组件通信05——redux ➕ react-redux(含数据共享)
React(react18)中组件通信05——redux ➕ react-redux(含数据共享) 1. 前言1.1 React中组件通信的其他方式1.2 介绍React-Redux1.2.1 简单介绍React-Redux1.2.2 官网 1.3 安装react-redux 2. 简单改写redux的例子2.1 提供store2.2…...
![](https://img-blog.csdnimg.cn/aff91d2952344119b9ac0bf886fc0afd.png)
字符函数和字符串函数(1)
前言 C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串 中或者 字符数组 中。 字符串常量 适用于那些对它不做修改的字符串函数. 1.求字符串长度 strlen 1.1 strlen size_t strlen ( const char * s…...
![](https://www.ngui.cc/images/no-images.jpg)
Visual Studio Code从GIT拉取vue项目并运行
安装Visual Studio Code 安装GIT 安装node.js,配置好环境变量 拉取项目 文章一 文章二 运行项目 文章一 提交代码 文章一...
![](https://img-blog.csdnimg.cn/31a39352b0104adfb73c8043ffdd3bfc.png)
【知识分享】Java获取全年每个月的有几周且每周是几号到几号
加哥本周给大家分享一期怎么用java把全年每个月有几周,本周是几号到几号的工具类。便于大家根据需求获取想要的形式进行改造。话不多说,直接给大家上代码。 package com.techfantasy.common.utils; import com.techfantasy.common.entity.DateRange; i…...
![](https://img-blog.csdnimg.cn/2fd347edd110408c9bed209fecccc823.jpeg)
学信息系统项目管理师第4版系列11_信息安全管理
1. 信息安全基础 1.1. 保密性(Confidentiality) 1.1.1. 信息不被未授权者知晓的属性 1.1.2. 确保信息不暴露给未授权的实体或进程 1.2. 完整性(Integrity) 1.2.1. 信息是正确的、真实的、未被篡改的、完整无缺的属性 1.2.2. 只有得到允许的人才能修改数据&…...
![](https://img-blog.csdnimg.cn/97428eded4964998a44483941ac15ca4.png)
sql注入原理分析
...
![](https://img-blog.csdnimg.cn/img_convert/b04f126bbb03a0ca25c4825f1978148c.png)
Mac磁盘空间满了怎么办?Mac如何清理磁盘空间
你是不是发现你的Mac电脑存储越来越满,甚至操作系统本身就占了100多G的空间?这不仅影响了电脑的性能,而且也让你无法存储更多的重要文件和软件。别担心,今天这篇文章将告诉你如何清除多余的文件,让你的Mac重获新生。 一…...
![](https://img-blog.csdnimg.cn/fa3fcf17132041d79de3cd5c6b25769b.png)
能ping通但无法上网的问题
大家好,今天我要和大家分享一下当你的IP地址能够成功 ping 通,却无法上网时该如何解决这个问题。这是一个相当常见的情况,在网络故障排查中经常遇到。别担心,我将为你揭开这个谜题,提供一些解决方案和技巧。 首先&…...
![](https://img-blog.csdnimg.cn/1dbfe24af28d4f929f7158242753de90.png#pic_center)
仿制 Google Chrome 的恐龙小游戏
通过仿制 Google Chrome 的恐龙小游戏,我们可以掌握如下知识点: 灵活使用视口单位掌握绝对定位JavaScript 来操作 CSS 变量requestAnimationFrame 函数的使用无缝动画实现 页面结构 实现页面结构 通过上述的页面结构我们可以知道,此游戏中…...
![](https://www.ngui.cc/images/no-images.jpg)
Redis面试题(五)
文章目录 前言一、使用过 Redis 做异步队列么,你是怎么用的?有什么缺点?二、 什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?总结 前言 使用过 Redis 做异步队列么,你是怎么用的…...
![](https://img-blog.csdnimg.cn/5abf55f241164fe8af9b220bb9bf08d4.png)
组队竞赛(int溢出问题)
目录 一、题目 二、代码 (一)没有注意int溢出 (二)正确代码 1. long long sum0 2. #define int long long 3. 使用现成的sort函数 一、题目 二、代码 (一)没有注意int溢出 #include <iostream&g…...
![](https://img-blog.csdnimg.cn/d49e54b90f30482ebbb5d7c0a012503c.jpeg#pic_center)
Swift SwiftUI 隐藏键盘
如果仅支持 iOS 15 及更高版本,则可以通过聚焦和取消聚焦来激活和关闭文本字段的键盘。 在最简单的形式中,这是使用 FocusState 属性包装器和 focusable() 修饰符完成的-第一个存储一个布尔值,用于跟踪第二个当前是否被聚焦。 Code struct C…...
![](https://www.ngui.cc/images/no-images.jpg)
Python与数据分析--Pandas-1
目录 1.Pandas简介 2.Series的创建 1.通过数组列表来创建 2.通过传入标量创建 3.通过字典类型来创建 4.通过numpy来创建 3.Series的索引和应用 1. 通过index和values信息 2. 通过切片方法获取信息 4.DataFrame的创建 1.直接创建 2.矩阵方式创建 3.字典类型创建 5.…...
![](https://img-blog.csdnimg.cn/0b0372906c4f4c94ac793253cf2fa7c9.png)
如何完美通过token获取用户信息(springboot)
1. 什么是Token? 身份验证令牌(Authentication Token):在身份验证过程中,“token” 可以表示一个包含用户身份信息的令牌。 例如 Token(JWT)是一种常见的身份验证令牌,它包含用户的…...
![](https://img-blog.csdnimg.cn/c3cd96db6f2c40ef889f20795843fd3b.png#pic_center)
2023 “华为杯” 中国研究生数学建模竞赛(B题)深度剖析|数学建模完整代码+建模过程全解全析
华为杯数学建模B题 当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2021年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 让我们来看看研赛的B题呀~! 问…...
![](https://www.ngui.cc/images/no-images.jpg)
文件相关工具类
文章目录 1.MultipartFile文件转File2.读取文件(txt、json)3.下载网络文件4.压缩文件 1.MultipartFile文件转File public File transferToFile(MultipartFile multipartFile) { // 选择用缓冲区来实现这个转换即使用java 创建的临时文件 使用 MultipartFile.transferto()…...
![](https://img-blog.csdnimg.cn/img_convert/e9ec115899addcf610f693ff766c986a.png)
18795-2012 茶叶标准样品制备技术条件
声明 本文是学习GB-T 18795-2012 茶叶标准样品制备技术条件. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了各类茶叶(除再加工茶)标准样品的制备、包装、标签、标识、证书和有效期。 本标准适用于各类茶叶(除再加工茶)感官品质…...
![](/images/no-images.jpg)
怎样给自己的网站做防红连接/网络营销官网
有这么一个快倒闭的商城,他们老板找了一个程序员,搞了一个消费返利的一个活动,通过这个活动,让他们濒临破产的商城从亏损到月销售额达到1400多万。他们到底是通过一个什么样的活动来实现“起死回生”的呢?今天给大家带…...
![](https://img-blog.csdnimg.cn/img_convert/f82d3a138cc22a7339ec0e3968e1fa54.png)
草莓网是b2b吗/搜索引擎优化怎么做的
考虑这个y(x)函数:我们可以在文件中生成这些分散的点:dataset_1D.dat:# x y0 01 12 03 -94 -32以下是这些点的一维插值代码:加载这些分散的点创建x_mesh执行1D插值代码:^{pr2}$图中显示了以下内容:现在&…...
![](/images/no-images.jpg)
北京网站设计十年乐云seo/seo搜索引擎优化平台
题目链接 题意: 有M个机器,N个任务 对第i个任务,需要在[Si,Ei]这段时间内恰有Pi天被process 每天最多有M个机器同时工作 每一天,一个任务若被process,那么它恰占用一个机器。 题解:建图,设一个超…...
![](https://images2017.cnblogs.com/blog/1057181/201708/1057181-20170808162106120-1373832724.png)
只买域名可以做自己的网站嘛/友链交换不限内容
首先,需要回到最原始的地震矩的表达式: 已知strike,dip,rake 根据strike和dip可以求出v,根据strike,dip,rake,可以求出u。 把求出来的v和u互换,相当于原来的位错矢量变成法向量,而法向量知道了,面也就知道了࿰…...
![](https://img-blog.csdnimg.cn/ec307750dece445eaa8ae2afbcec0b67.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQ2hhcmxlcyBZYW4=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
wordpress脚本/引流获客工具
K8S学习之CentOS7系统搭建Docker环境前言CentOS7虚拟机安装联网Docker环境部署添加普通用户执行权限安装Docker启动DockerDocker配置Docker常用命令参考链接前言 内容介绍 本次安装事先基于win10环境安装VMWare 12虚拟机,并创建完成CentOS7镜像,在以上基…...
![](/images/no-images.jpg)
网站建设博采/小辉seo
注意如下几点:1 其中,21000是impala-shell使用,21050是impala jdbc使用2 在Impala 2.0以后,可以使用两种方式去连接impala, Cloudera JDBC Connector 和 Hive 0.13 JDBC driver,一般推荐使用的是Cloudera J…...