首页 > 其他分享 >P8815 [CSP-J 2022] 逻辑表达式 题解

P8815 [CSP-J 2022] 逻辑表达式 题解

时间:2024-10-23 11:58:38浏览次数:5  
标签:dl P8815 ++ 题解 短路 ansv else int 2022

短路

我们可以使用一个变量来记录当前有没有短路.

设变量短路为 $dl$. 当 $dl$ 为 $0$ 时,说明当前值为 $0$,且运算符为 &.

当 $dl$ 为 $1$ 时,说明当前值为 $1$,且运算符为 |.

代码

重点讲完了,细节可以看代码以及注释.

#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;

string s;
int ansv, ans1, ans2;
int is_dl = -1;

int main() {
	getline(cin, s);
	for (int i = 0; i < s.size(); i++) {
		if (is_dl != -1) { // 没有短路
			if (s[i] == '(') { // 跳掉括号
				int nowp = 1; // 括号个数
				while (nowp > 0) { // 知道没有括号为止
					i++;
					if (s[i] == '(') nowp++;
					if (s[i] == ')') nowp--;
				}
			}
			else if (is_dl == 0 && s[i] == '|') // 非正确短路
				is_dl = -1; // 不判断 & 是因为运算级优先的问题
			else if (s[i] == ')') // 没有运算符或值
				is_dl = -1;
			else if (is_dl == 0 && s[i] == '&') // 成功短路
				ans1++;
			else if (is_dl == 1 && s[i] == '|') // 成功短路
				ans2++;
		}
		else {
            // 记录答案
			if (s[i] == '0' || s[i] == '1') ansv = s[i] - '0';
			if (ansv == 0 && s[i] == '&') { // 短路 0 & ...
				is_dl = 0;
				ans1++;
			}
			else if (ansv == 1 && s[i] == '|') { // 短路 1 | ...
				is_dl = 1;
				ans2++; 
			}
		}
	}
	printf("%d\n%d %d", ansv, ans1, ans2);
	return 0;
}

标签:dl,P8815,++,题解,短路,ansv,else,int,2022
From: https://www.cnblogs.com/panda-lyl/p/18496099

相关文章

  • 最佳序列 题解
    最佳序列题解题目描述你得到了一个\(N\)个非负整数组成的序列\(A\)。我们称由序列\(A\)的连续若干项组成的新序列为\(A\)的一个连续子序列。给出两个正整数\(L,R(L\leR)\)。称\(A\)的每一个长度不小于\(L\)且不大于\(R\)的连续子序列为一个纯洁序列,定义纯洁度......
  • 题解 [NOIP2022] 建造军营
    树形\(dp\)好题。观察题目发现,如果B国袭击后,导致A国两个军营不联通,那么B国袭击的一定是一条割边,反之,如果袭击的不是割边,那么不会导致任何影响。所以先进行边双缩点,变成一棵树,记每个联通块(缩完后)内的点数为\(wa\),边数为\(wb\),不妨先考虑对于树的情况如何处理。将问题进行转......
  • 20241022 校测T1 链链链(chain)题解
    Problem链链链chain你有一个长度为\(n\)的链,编号为\(i(1≤i<n)\)的边连接着结点\(i\)与\(i+1\)。每个结点\(i\)上有一个整数\(a_i\)。你需要做以下操作\(n−1\)次:•选择一条还未被断开的边,设其连接了点\(i\)与\(i+1\),将其断开。•断边后,对于所......
  • 20222306 2024-2025-1《网络与系统攻防技术》实验三实验报告
    1.实验内容1.1实践任务(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧(2)通过组合应用各种技术实现恶意代码免杀(3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本1.2问题回答(1)杀软是如何检测出恶意代码的?杀软检测......
  • P9751 [CSP-J 2023] 旅游巴士 题解
    思路首先,举一个例子,假如说小Z到了入口,但是没到时间,所以没法进去,该怎么办?当然是等$k$个时间单位呀.除此之外,像到了其他景区,但是还没开门怎么办?继续等$k$的非负整数倍时间呀.知道这个后,我们先定义状态$f_{i,j}$,表示到达点$i$时,路径长度(即时间)$mod$$k$的最早时......
  • 20222304 2024-2025-1 《网络与系统攻防技术》实验二实验报告
    一、实验内容1.1知识回顾堆栈结构和堆栈变化EIP:存储下一条指令;EBP:栈底指针;ESP:栈顶指针。栈溢出的三种方法:修改栈中邻接变量;修改函数返回地址;代码植入。shellcode构建RET返回地址;NOP空(0X90);shellcode调用shell;NSR模式;RNS模式;RS模式缓冲区溢出的防范技术源程序检查:静态检......
  • P9749 [CSP-J 2023] 公路 题解
    此题贪心食用更佳在输入油价的时候,我们边计算油价的最小值和路程和.当路程之和$>0$时,计算油价并且减去对应路程即可.注意事项要开$long$$long$!!!.代码#include<iostream>#include<cstdio>#include<cmath>#include<cstring>usingnamespacestd;typedeflonglo......
  • P9750 [CSP-J 2023] 一元二次方程 题解
    大模拟此题大模拟即可,只需注意几点:分母$>0$.要给根式化简.分数要约分.求较大根,那就$b^2$加$\bigtriangleup$即可.分母>0因为求根公式中,分母中只有$a$一个未知数,所以我们只需保证$a>0$即可.所以,当$a<0$时,我们把$a,b,c$全部取相反值.但这也是......
  • 题解:P10949 四叶草魔杖
    2024/10/16更新:修改了状态的枚举方式,时间复杂度变为\(O(3^n)\)。题目传送门前言本篇题解默认您已熟练掌握最小生成树、状压dp及其应用,如果您还不会,请先阅读相关博客。分析我们要选出一条边,通过边转移能量,使得所有宝石的能量都为\(0\)。这看上去挺麻烦的,让我们挖掘一......
  • 题解:AT_joisc2019_k 合併 (Mergers)
    题目传送门前言联考题,被初一的我切了。看到题解区里没有Tarjan做法,于是来补一篇Tarjan题解。分析因为相同州的城市不会分裂,所以可以给相同州的成市连边(注意不是两两连边,连成一个环就行),发现把国家分成两个部分就相当于断掉一条道路。那么如果整个国家就是一个边双连通分量,......