SJTU括号栈配对(OJ599)

2023-10-30

题目源自SJTU OJ 1599

模拟一个括号栈,其元素是三种括号()、[]、{}。

给出长为n的操作序列,按序列要求完成以下几种操作:

push

pop(栈空则忽略此操作)

输出栈顶元素(栈空则忽略此操作)

询问当前括号是否匹配(栈空则认为匹配)

Input Format
第1行一个整数n,代表总共有n次操作。

第2~n+1行,每行1个整数,第一个数代表操作种类,对于操作1,在同行给定一个入栈元素。

Output Format
对于每次询问操作,输出一行代表答案。

操作3:输出栈顶元素

操作4:匹配输出“YES”,否则输出“NO”

e.g.

{[()]} 匹配

{[}] 不匹配

Sample Input
6
1 (
1 )
3
4
2
4
Sample Output
)
YES
NO

#include <iostream>
using namespace std;

char getPair(char c) {
	if (c == ')')
		return '(';
	else if (c == ']')
		return '[';
	else if (c == '}')
		return '{';
	else
		return '@';
}

bool isMatch(char* seq, int length) {
	if (length == 0) {
		return true;
	}
	char* stack = new char[length];
	int top = 0;
	for (int i = 0; i < length; i++) {
		if (top == 0) {
			stack[top] = seq[i];
			top++;
			continue;
		}
		if (stack[top - 1] == getPair(seq[i])) {
			top--;
		}
		else {
			stack[top] = seq[i];
			top++;
		}
	}
	delete[] stack;
	if (top == 0) {
		return true;
	}
	return false;
}

int main() {
	int n = 0, ins = 0;
	char op = 0;
	scanf(" %i", &n);
	//    cin >> n;
	char* stack = new char[n];
	int top = 0;

	for (int i = 0; i < n; i++) {
		//        cin >> ins;
		scanf(" %d", &ins);
		switch (ins) {
		case 1: {
			// push
//                cin >> op;
			scanf(" %c", &op);
			stack[top] = op;
			top++;
			break;
		}
		case 2: {
			// pop
			if (top != 0) {
				top--;
			}
			break;
		}
		case 3: {
			// cout << top
			if (top != 0) {
				//                    cout << stack[top - 1] << endl;
				printf("%c\n", stack[top - 1]);
			}
			break;
		}
		case 4: {
			// is match?
			if (isMatch(stack, top)) {
				//                    cout << "YES" << endl;
				printf("YES\n");
			}
			else
				//                    cout << "NO" << endl;
				printf("NO\n");
			break;
		}
		default:
			break;
		}
	}
	delete[] stack;
	return 0;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SJTU括号栈配对(OJ599) 的相关文章

  • 运行 t4 脚本作为 resx 文件的自定义工具

    我有一个资源文件MyResource resx 我想改变MyResource Designer cs文件生成 我有一个 t4 脚本 它接受 resx 文件作为输入并给出结果转换 但是 我必须手动运行此 t4 才能使其工作 我看到 resx
  • C语言中的递归是如何工作的?

    我试图了解 C 中递归的工作原理 任何人都可以给我解释控制流吗 include
  • C++ 返回值、引用、const 引用

    你能向我解释一下返回值 值引用和值常量引用之间的区别吗 Value Vector2D operator const Vector2D vector this gt x vector x this gt y vector y return t
  • 使用 C++ 拆分“[常规设置]”格式的节字符串

    我是 C 新手 我想读取包含部分和键值对的 ini 文件 根据部分 我想读取相应键的值 首先 我想阅读方括号内的部分 请帮忙 谢谢 对于真正的 INI 文件解析 我强烈建议iniparser库 http ndevilla free fr i
  • MySql 最后插入 ID,连接器 .net

    我正在使用 MySql Connector net 我需要获取最后一个查询生成的插入 id 现在 我假设返回值是MySqlHelper ExecuteNonQuery应该是最后一个插入id 但它只返回1 我正在使用的代码是 int inse
  • 使用预编译头减少 clang 编译时间

    我正在开发一个数据库项目 该项目将查询 以某种高级语言表示 编译为 C 代码 这段代码由数据库编译并执行 那部分工作得很好 现在 我正在尝试减少 C 查询代码的编译时间 我想知道是否可以使用预编译头来提高性能 该查询被转换为一个名为 Que
  • 在不使用 ncurses 的情况下用 C/C++ 编写“真正的”交互式终端程序,例如 vim、htop...

    不 我不想使用ncurses 因为我想了解如何 终端可以工作 并且我自己编程也很有趣 没有 必须是可移植的 它必须只能在基于 linux xterm 的终端仿真器上工作 我想做的是编写一个交互式终端应用程序 例如 htop 和 vim 我的
  • WinForms - 表单大小错误

    我们有以下代码 private void MainForm Shown object sender EventArgs e RepositionForm private void RepositionForm Rectangle rect
  • Qt QML 数据模型似乎不适用于 C++

    我一直在使用中的示例http doc qt digia com 4 7 qdeclarativemodels html http doc qt digia com 4 7 qdeclarativemodels html这是 QML 声明性数
  • ASP.NET MVC 路由 - 向路由添加 .html 扩展名

    我对 MVC 和路由非常陌生 我被要求修改一个应用程序以使用不同的 url 由于我没有经验 这项任务对我来说有点困难 好吧 让我们谈谈一些代码 routes MapRoute CategoryBySeName Route name prod
  • 按值返回的函数的返回语句中的初始化

    我的问题源于深入研究std move in return语句 例如以下示例 struct A A std cout lt lt Constructed lt lt this lt lt std endl A A noexcept std c
  • ASP.NET MVC 中 ModelState.AddModelError 中的关键参数有什么意义?

    我在我的控制器中添加了验证检查来修改ModelState如果验证失败 例如 private bool ValidateMoney string raw string name decimal min decimal max try var
  • 该组件没有由 uri 标识的资源

    我想创建一个通用数据网格以在我的所有视图 用户控件上使用 这是我的结构 Class Library called Core Class called ViewBase public class ViewBase UserControl pu
  • TreeView:仅在子节点中存在复选框

    我需要一个树视图控件 根节点没有复选框 只有图像 所有子节点都有一个复选框 图像 C net 2 0 winforms 不是 wpf WinForms树视图默认不支持混合复选框 非复选框节点 您可以在树视图上全局启用复选框 并使用以下命令在
  • 如何解决内存碎片

    我们偶尔会遇到这样的问题 长时间运行的服务器进程 在 Windows Server 2003 上运行 由于内存分配失败而引发异常 我们怀疑这些分配由于内存碎片而失败 因此 我们一直在寻找一些可能对我们有帮助的替代内存分配机制 我希望有人能告
  • char* argv[] 在 c/c++ 中如何工作? [复制]

    这个问题在这里已经有答案了 我知道它用于使用命令行中的参数 但我没有得到声明 字符 argv 它是否意味着指向 char 数组的指针 如果是的话为什么没有大小 如果不是动态数组 就不需要有大小吗 我做了一些研究 发现有人说它会衰减为 cha
  • 参数数量在编译时确定的 Lambda 函数

    我想声明一个带有 N 个参数的 lambda 函数 其中 N 是模板参数 就像是 template
  • OpenGL 计算着色器调用

    我有一个与新计算着色器相关的问题 我目前正在研究粒子系统 我将所有粒子存储在着色器存储缓冲区中 以便在计算着色器中访问它们 然后我派遣一个一维工作组 define WORK GROUP SIZE 128 shaderManager gt u
  • 清理堆分配对象的良好实践或约定?

    我正在学习C 我有 C C ObjC 背景 相当高级的语言 在 C 或 ObjC 上 作为函数或方法的结果返回堆分配的对象是很简单的 因为对象的清理是受管理的 按照惯例 会在适当的时候销毁 但我不知道在 C 中应该如何处理这个问题 例如 s
  • 从 STL 列表中删除项目

    我想创建一个函数 如果符合特定条件 则将项目从一个 STL 列表移动到另一个列表 这段代码不是这样做的方法 迭代器很可能会被擦除 函数失效并导致问题 for std list

随机推荐

  • 【Linux命令详解

    文章标题 简介 一 参数列表 二 使用介绍 1 打包文件和目录 2 解包归档文件 3 压缩归档文件 4 列出归档文件内容 5 排除特定文件 6 保留文件权限和所有权 7 保留时间戳 8 增量备份 9 使用文件列表 10 压缩级别控制 总结
  • html iframe post,iframe实现跨域post请求的技术细节

    在最近的一个项目中 我打算在页面上实现这样一个功能 在网页上画出某种图形 上传到服务器后 返回一个src地址 这个地址可以用来分享到各种社交媒体 这个功能看似非常简单 但要实现它还需要注意各种小的细节 首先说下思路和技术要点 用canvas
  • vue下载所有格式的文件

    vue下载所有格式的文件 vue下载所有格式的文件需要先安装downloadjs插件 downloadjs官网 https github com rndme download 下载插件 npm install downloadjs vue引
  • STM32F103操作DS1302时钟芯片串口显示(标准库和HAL库)

    目录 DS1302的性能指标 DS1302的寄存器及片内RAM 标准库实现 HAL库实现 源码链接 单片机型号 STM32F103C8T6 在日常生活中 很多情况下会需要使用时间 单片机中虽然也是有定时器但并不能较为准备的实现计时功能 而且
  • SpringBoot + Poi-tl操作word,快速生成报表

    前段时间做了一个需求 需要快速生成一份数据报告 里面包含了文字 图片和数据报表 同时生成的图形数据也可以随意修改 之前想着使用Apache POI来进行实现 在翻阅一些资料后 发现poi tl更适合我们的业务 也更容易上手 于是对其进行了研
  • 什么是实例分割,与语义分割和目标检测有何不同?

    在计算机视觉领域 图像分割是一项重要任务 旨在将图像分割成具有语义或实例级别的不同区域 实例分割 语义分割和目标检测是图像分割中的三个关键概念 本文将介绍这些概念 并详细讨论它们之间的区别和特点 什么是目标检测 1 目标检测 目标检测是一种
  • docker容器CPU共享比例——通过--cpu-shares选项设置容器按比例共享CPU资源(弹性)

    多容器任务运行时 很难计算CPU的使用率 命令中的 cpu shares选项值不能保证可以获得1个vcpu或者多少GHz的CPU资源 仅仅只是一个弹性的加权值 root 10 docker run name con1 itd cpu sha
  • 爬取B站前两千位up主的粉丝数

    看到B站有很多分析up主粉丝量的视频 自己也来试着实现一下 第一步先进到一位up主的个人空间 这里以uid是1和2的bishi为例 https space bilibili com 1 用户名 bishi https space bilib
  • 记录:电脑弹出U盘显示设备正在使用中(已解决)

    问题描述 弹出U盘时提示 该设备正在使用中 请关闭可能使用该设备的所有程序或窗口 然后重试 方法一 确认能看到的打开的程序 窗口 文件等关闭 方法二 剪切板中没有移动硬盘里的文件 可以复制粘贴一下电脑硬盘的文件 方法三 查看占用的进程 ID
  • js 删除对象里的某个属性

    删除属性有很多方法 学到了就在这里记录一下 有一个对象 a 有2个属性 b 1 c 2 删除b 保留 c 1 使用delete let a b 1 c 2 delete a b true console log a c 2 2 使用解构 l
  • windows C++ 获取CPU ID

    网上找到了相关代码 但是其中用了嵌入式汇编 只能在win32位下编译运行 根据其他网络资料进行了修改 可以在x64下编译运行 原版资料见链接 链接 link 修改后的代码为 include stdafx h include GetCPUId
  • 【转载】数据库操作系统——Visual FoxPro 6.0安装步骤

    转载地址 https blog csdn net panrenlong article details 82289978 utm medium distribute pc relevant none task blog BlogCommen
  • 如何在DAYU200上安装浏览器-基于OpenHarmony 3.1 Release版本

    1 前言 终于 OpenHarmony有自己的浏览器应用了 可以查看视频演示 先看下效果 打开某宝 可以扫码登录 2 安装教程 2 1 DAYU200升级最新的 3 1Release版本固件 升级教程 https www bilibili
  • Dva系列:connect与@connect的使用(一)

    前言 在刚开始使用Dva的时候 写好models 通过connect进行仓库与组件的链接的时候怎么不是很理解 翻译官方文档也没有明确的解释 提示 以下是本篇文章正文内容 下面案例可供参考 一 connect的用来干什么 connect用来链
  • (微服务多模块)Springboot+Security+Redis+JWT 仅需一招

    小编在开发阶段发现 在现在众多文章中的教程里 虽然有许许多多的Springboot Security Redis JWT 但是那些教程基本的运行环境都在单个项目单个模块中进行开发和测试的 这使得小编在实际的开发过程中 不能Ctrl C an
  • ionic工程报错->Current working directory is not a Cordova-based project的解决

    构建ionic工程出错 奇怪了哎 代码没有动啊 于是重新拉取一份代码 构建发现可以的 于是用比较工具查看 原来是误删了工程目录下的www文件夹导致不能识别 把它恢复就好啦
  • windows下安装gmp库+Dev c++

    需要的三个安装文件 1 Dev c 安装文件 链接 https pan baidu com s 18us8SEEh82zzMvtAeJDedA pwd 1zgo 提取码 1zgo 2 gmp库文件 链接 https pan baidu co
  • 通配符的匹配很全面, 但无法找到元素 'aop:aspectj-autoproxy' 的声明

    因为项目需要 想使用spring的注解方法的AOP切面编程 在xml配置文件中加入
  • 图片自动填充单元格_教你两个word技巧,快速填充文本,插入表格不变形

    许多人说 Word没有什么用 只是一个打字工具 因此长期以来 Word是最被忽视的办公软件之一 觉得自己没必要学习这个软件 从而放弃了学习 但事实却并非如此 在Word看似 简单 的外表下 隐藏着海量的功能和技巧 但很多人其实只会了Word
  • SJTU括号栈配对(OJ599)

    题目源自SJTU OJ 1599 模拟一个括号栈 其元素是三种括号 给出长为n的操作序列 按序列要求完成以下几种操作 push pop 栈空则忽略此操作 输出栈顶元素 栈空则忽略此操作 询问当前括号是否匹配 栈空则认为匹配 Input Fo