news 2026/4/16 17:17:31

csp信奥赛C++标准模板库STL案例应用13

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
csp信奥赛C++标准模板库STL案例应用13

csp信奥赛C++标准模板库STL案例应用13

stack实践

题目描述

假设一个表达式有英文字母(小写)、运算符(+-*/)和左右小(圆)括号构成,以@作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则输出YES;否则输出NO。表达式长度小于255 255255,左圆括号少于20 2020个。

输入格式

一行:表达式。

输出格式

一行:YESNO

输入输出样例 1
输入 1
2*(x+y)/(1-x)@
输出 1
YES
输入输出样例 2
输入 2
(25+x)*(a*(a+b+b)@
输出 2
NO
说明/提示

表达式长度小于255 255255,左圆括号少于20 2020个。

解题思路

这是一个经典的括号匹配问题,使用栈(Stack)数据结构来解决:

  1. 核心算法:遍历表达式中的每个字符,遇到左括号'('就压入栈,遇到右括号')'就从栈中弹出一个左括号
  2. 匹配规则
    • 当遇到右括号时,如果栈为空(没有左括号与之匹配),则括号不匹配
    • 遍历结束后,如果栈不为空(还有左括号没被匹配),则括号不匹配
  3. 终止条件:表达式以@结尾,所以只需处理@之前的所有字符

代码实现

#include<bits/stdc++.h>usingnamespacestd;string s;// 存储输入的表达式stack<int>st;// 使用栈来跟踪左括号的数量(这里用int存储字符的ASCII码)intmain(){cin>>s;// 读取表达式,直到遇到空白符// 由于表达式以@结尾,我们需要找到@的位置// 注意:size()返回字符串长度,索引从0开始// 例如:字符串"abc@"的长度为4,索引为0,1,2,3intn=s.size()-2;// 计算需要处理的字符的最大索引(@的前一个字符)// 遍历所有有效字符(即@之前的所有字符)for(inti=0;i<=n;i++){if(s[i]=='('){// 遇到左括号,压入栈中st.push(s[i]);}elseif(s[i]==')'){// 遇到右括号if(st.empty()){// 栈为空,说明没有匹配的左括号cout<<"NO";return0;// 提前结束程序}else{st.pop();// 弹出栈顶的左括号}}}// 检查栈是否为空,若空则所有括号匹配,否则不匹配if(st.empty()){cout<<"YES";}else{cout<<"NO";}return0;}

功能分析

输入处理
  • 使用cin >> s读取表达式字符串,读取会持续直到遇到空白符
  • 表达式以@字符结束,这是一个终止标志
核心逻辑
  1. 栈的使用:利用栈的先进后出(LIFO)特性,确保每个右括号都能匹配最近未匹配的左括号
  2. 边界条件检查
    • 遇到右括号时栈为空 → 右括号多余 → 输出NO
    • 遍历结束后栈不为空 → 左括号多余 → 输出NO
    • 所有括号都正确匹配 → 栈最终为空 → 输出YES
时间复杂度
  • 时间复杂度:O(n),其中 n 是表达式长度(<255),每个字符最多被处理一次
  • 空间复杂度:O(k),其中 k 是左括号数量(<20),栈的最大深度不超过左括号数量

测试用例验证

测试用例1:2*(x+y)/(1-x)@
  • 遍历过程:遇到’(‘压栈,遇到’)'弹栈,最终栈为空
  • 输出:YES
测试用例2:(25+x)*(a*(a+b+b)@
  • 遍历过程:遇到多个’(‘压栈,遇到’)'弹栈,但最终栈中还有未匹配的左括号
  • 输出:NO
边界测试
  • 空表达式:@→ 栈为空 →YES
  • 只有左括号:((( @→ 栈不为空 →NO
  • 只有右括号:))) @→ 遇到右括号时栈为空 →NO
  • 交替括号:()()() @→ 每次匹配成功 →YES
  • 嵌套括号:((())) @→ 完全匹配 →YES

各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}
  • 一、CSP信奥赛C++通关学习视频课:
    • C++语法基础
    • C++语法进阶
    • C++算法
    • C++数据结构
    • CSP信奥赛数学
    • CSP信奥赛STL
  • 二、CSP信奥赛C++竞赛拿奖视频课:
    • 信奥赛csp-j初赛高频考点解析
    • CSP信奥赛C++复赛集训课(12大高频考点专题集训)
  • 三、考级、竞赛刷题题单及题解:
    • GESP C++考级真题题解
    • CSP信奥赛C++初赛及复赛高频考点真题解析
    • CSP信奥赛C++一等奖通关刷题题单及题解

详细内容:

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转


2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

3、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

  • 2025 csp-j 复赛真题及答案解析(最新更新)
  • 2025 csp-x(山东) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(河南) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(辽宁) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(江西) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(广西) 复赛真题及答案解析(最新更新)
  • 2020 ~ 2024 csp 复赛真题题单及题解
  • 2019 ~ 2022 csp-j 初赛高频考点真题分类解析
  • 2021 ~ 2024 csp-s 初赛高频考点解析
  • 2023 ~ 2024 csp-x (山东)初赛真题及答案解析
  • 2024 csp-j 初赛真题及答案解析
  • 2025 csp-j 初赛真题及答案解析(最新更新)
  • 2025 csp-s 初赛真题及答案解析(最新更新)
  • 2025 csp-x (山东)初赛真题及答案解析(最新更新)
  • 2025 csp-x (江西)初赛真题及答案解析(最新更新)
  • 2025 csp-x (辽宁)初赛真题及答案解析(最新更新)

CSP信奥赛C++一等奖通关刷题题单及题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

  • 129 道刷题练习和详细题解,涉及:模拟算法、数学思维、二分算法、 前缀和、差分、深搜、广搜、DP专题、 树和图

4、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 14:28:32

EvolvePro蛋白质工程优化工具:AI驱动的精准蛋白质设计新范式

EvolvePro蛋白质工程优化工具&#xff1a;AI驱动的精准蛋白质设计新范式 【免费下载链接】EvolvePro This is the offical codebase to reproduce and use EVOLVEpro, a model for in silico directed evolution of protein activities using few-shot active learning. 项目…

作者头像 李华
网站建设 2026/4/7 2:28:42

突破传统:gmpublisher如何彻底改变Garry‘s Mod模组发布体验

突破传统&#xff1a;gmpublisher如何彻底改变Garrys Mod模组发布体验 【免费下载链接】gmpublisher ⚙️ Workshop Publishing Utility for Garrys Mod, written in Rust & Svelte and powered by Tauri 项目地址: https://gitcode.com/gh_mirrors/gm/gmpublisher …

作者头像 李华
网站建设 2026/4/16 11:15:26

17、C 委托、匿名方法与事件详解

C# 委托、匿名方法与事件详解 1. 委托基础 委托是一种类型,它可以引用一个或多个方法。在容器排序的场景中,容器类 Container 定义了一个委托 CompareItemsCallback ,该委托接收两个待比较的对象作为参数,并返回一个整数来指定这两个对象的顺序。 Employee 类中声明…

作者头像 李华
网站建设 2026/4/16 11:05:00

5分钟掌握AI图像增强:轻量级动漫修复实战指南

5分钟掌握AI图像增强&#xff1a;轻量级动漫修复实战指南 【免费下载链接】Real-ESRGAN Real-ESRGAN aims at developing Practical Algorithms for General Image/Video Restoration. 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN 还在为模糊的动漫截图而…

作者头像 李华
网站建设 2026/4/13 22:43:15

27、基于 Windows Forms 开发 DiskDiff 应用程序全解析

基于 Windows Forms 开发 DiskDiff 应用程序全解析 1. 背景与目标 在开发 Windows 应用程序时,.NET Framework 中的 Windows Forms 部分是编写富客户端应用(即 Windows 应用)的有效工具。为了更好地理解如何编写 Windows Forms 应用程序,我们将开发一个名为 DiskDiff 的实…

作者头像 李华
网站建设 2026/4/16 12:08:00

eMQTT-Bench 终极指南:专业级 MQTT 性能测试工具完全解析

eMQTT-Bench 终极指南&#xff1a;专业级 MQTT 性能测试工具完全解析 【免费下载链接】emqtt-bench Lightweight MQTT benchmark tool written in Erlang 项目地址: https://gitcode.com/gh_mirrors/em/emqtt-bench &#x1f680; eMQTT-Bench 是一款基于 Erlang 语言开…

作者头像 李华