当前位置: 首页 > news >正文

UVa 551 Nesting a Bunch of Brackets

题目描述

题目要求检查表达式中的括号是否正确嵌套。括号类型包括:()[]{}<>以及复合括号(**)(各视为一个字符)。表达式中的非括号字符(包括字母、数字、运算符等)也占一个位置。若表达式正确,输出YES;否则输出NO及第一个导致错误的位置(即最短不能扩展为正确表达式的前缀长度)。

输入格式

输入包含多行,每行一个表达式(长度不超过300030003000)。输入以文件结束符(EOF\texttt{EOF}EOF)终止。

输出格式

对于每行输入,输出一行:若正确,输出YES;否则输出NO和一个空格,然后输出错误位置。

样例

输入

(*a++(*) (*a{+}*)

输出

NO 6 YES

题目分析

本题的核心是使用栈进行括号匹配。

括号识别

  • 普通括号:()[]{}<>
  • 复合括号:(**)各视为一个符号(两个字符)。
  • 非括号字符视为普通字符,只占位置,不影响括号匹配。

算法

  • 遍历字符串的每个字符,维护当前位置计数器(从111开始)。
  • 遇到左括号(([{<(*)时,将对应符号压栈。
  • 遇到右括号()]}>*))时,检查栈顶是否为对应的左括号。若是则弹出,否则记录错误位置并退出。
  • 遍历结束后,若栈非空,则存在未匹配的左括号,错误位置为最后一个字符的位置加111(即超出表达式长度)。

注意点

  • (**)是两个字符,需要一起处理。
  • 非括号字符只增加位置计数,不改变栈。

复杂度分析

每个字符处理一次,时间复杂度O(L)O(L)O(L)

代码实现

// Nesting a Bunch of Brackets// UVa ID: 551// Verdict: Accepted// Submission Date: 2016-08-18// UVa Run Time: 0.000s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intmain(intargc,char*argv[]){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);charleft_brackets[4]={'(','[','{','<'},right_brackets[4]={')',']','}','>'};string line;while(getline(cin,line)){stack<char>brackets;inti=0,length=line.length(),counter=0;boolerror=false;while(i<length){counter++;if(line[i]=='('){if(i+1<length&&line[i+1]=='*'){brackets.push('$');i++;}elsebrackets.push('(');}elseif(line[i]=='*'){if(i+1<length&&line[i+1]==')'){if(brackets.empty()||brackets.top()!='$'){error=true;break;}else{brackets.pop();i++;}}}else{boolupdated=false;for(intj=0;j<4;j++)if(left_brackets[j]==line[i]){brackets.push(line[i]);updated=true;break;}if(!updated){for(intj=0;j<4;j++)if(right_brackets[j]==line[i]){if(brackets.empty()||brackets.top()!=left_brackets[j])error=true;elsebrackets.pop();break;}}if(error)break;}i++;}if(brackets.size()>0)error=true;if(error&&i==length)counter++;if(error)cout<<"NO "<<counter<<'\n';elsecout<<"YES\n";}return0;}
http://www.jsqmd.com/news/1058387/

相关文章:

  • LangFlow:连续扩散模型在语言建模中的创新应用
  • 从B站大会员到本地收藏:bilibili-downloader解锁4K高清视频下载新体验
  • AI辅助攻克高维超立方体引导渗流:从组合极值到算法实践
  • 2026年中浙江不锈钢厨房排烟油烟净化器选购指南 - 品牌鉴赏官2026
  • 劳力士中国售后服务体系研究报告(2026年6月) - 博客万
  • 2026年制造业数字化质量检测:从工程图纸到FAI检验计划的标准化实操
  • Ubuntu 18.04 apt安装Java:多版本共存与系统级环境配置
  • 【小白也能轻松用】新手零基础上手本地 AI,OpenClaw v2.7.9 保姆级分步教学(含最新安装包)
  • DTEA:实时切换串并联拓扑的弹性驱动器设计与控制
  • 无线广播下分布式学习的混合矩阵优化设计:原理、方法与实现
  • 终极VMware macOS解锁工具:如何在Windows/Linux上免费运行苹果系统 [特殊字符]
  • 机器学习如何预测并补偿大规模MIMO中的功放非线性失真
  • RISE算法:大模型训练数据影响力高效估算与溯源实践
  • 2026红河防水补漏避坑指南:卫生间/厨房/阳台/屋顶/地下室漏水检测维修全攻略,正规施工+透明报价+口碑榜靠谱服务商推荐 - 安佳防水
  • 2026绵阳防水补漏避坑指南:卫生间/厨房/阳台/屋顶/地下室漏水检测维修全攻略,正规施工+透明报价+口碑榜靠谱服务商推荐 - 安佳防水
  • 自然梯度与Nesterov加速法在非线性PDE优化求解中的对比实践
  • Tan-HWG框架:用Wasserstein几何约束Hebbian学习实现稳健持续学习
  • 基于双层优化与MCTS的LLM智能体技能优化框架设计与实现
  • SAGE框架:基于注意力引导的长文档问答上下文压缩技术解析
  • CodeWarrior for MPC5xx:嵌入式开发工具链深度解析与实战指南
  • 智能体驱动的可视化分析:从人机协作到自主生态的架构指南
  • 联邦学习与LoRA:无线边缘网络干扰抑制的参数高效自适应方法
  • 视频扩散模型加速实战:步数蒸馏、高效注意力与量化技术解析
  • LangFlow框架:基于Bregman散度的连续扩散语言建模技术
  • Java Programming Chapter 4——Transformation between References (1)
  • 构建OWASP MASTG自动化测试框架:从原理到落地的分阶段实践指南
  • 基于接触感知的连续体机器人轨迹规划与控制框架设计与实现
  • 武汉市硚口区房屋修缮|维小达|窗户维修、吊顶维修、壁纸壁布、墙面维修、石材修复、瓷砖美缝、瓷砖维修全屋一站式旧房翻新破损修护服务 - 维小达科技
  • League-Toolkit:英雄联盟玩家的终极桌面助手,一键提升游戏体验
  • 基于TTCA的LLM智能路由:轻量级准确率预估与多目标决策实践