嗯...

题目链接:https://www.luogu.org/problem/P1241

首先这道题是栈的入门题的加强版, 不仅要你判断这个括号序列是否合法,还要你将这个序列补充完整...

一开始是没有头绪的,看到tj之后恍然大悟...

思路:

我们假设所有的括号都是不合法的,即都没有匹配,然后我们从头扫一遍,对于左括号的处理比较简单:

把所有左括号的下标存入q这个手写栈,然后把所有左括号对应的右括号存入b数组中。

然后对于右括号的处理比较复杂:

如果先前的左括号都已匹配或者栈顶的左括号不与之匹配,那么将这个右括号匹配与其他匹配,即在b数组相应位置放一个左括号。如果匹配则将b数组中存的右括号清除。

输出时注意顺序...

AC代码:

 #include<cstdio>
#include<iostream>
#include<cstring> using namespace std; char s[], b[];
int q[], cnt; int main(){
scanf("%s", s);
int l = strlen(s);
for(int i = ; i < l; i++){
if(s[i] == '(') {q[++cnt] = i; b[i] = ')'; continue;}
if(s[i] == '[') {q[++cnt] = i; b[i] = ']'; continue;}
if(s[i] == ')' || s[i] == ']'){
if(!cnt || b[q[cnt]] != s[i]){
if(s[i] == ')') b[i] = '(';
else b[i] = '[';
}
else b[q[cnt--]] = ' ';
}
}
for(int i = ; i < l; i++){
if(b[i] == '(' || b[i] == '[') printf("%c", b[i]);
printf("%c", s[i]);
if(b[i] == ')' || b[i] == ']') printf("%c", b[i]);
}
return ;
}

AC代码

洛谷 P1241 括号序列(栈)的更多相关文章

  1. 洛谷 P1241 括号序列

    P1241 括号序列 题目描述 定义如下规则序列(字符串): 1.空序列是规则序列: 2.如果S是规则序列,那么(S)和[S]也是规则序列: 3.如果A和B都是规则序列,那么AB也是规则序列. 例如, ...

  2. 【洛谷】【单调栈】P4333 [COI2007] Patrik

    --接上一篇题解,[洛谷][单调栈]P1823音乐会的等待 关于题目大意在上一篇题解里已经说清楚了,这里不再多阐述 想看题目->戳这里 [算法分析:] 在对元素a进行判断时,如果它与栈顶元素相等 ...

  3. 洛谷 P1628 合并序列

    洛谷 P1628 合并序列 题目传送门 题目描述 有N个单词和字符串T,按字典序输出以字符串T为前缀的所有单词. 输入格式 输入文件第一行包含一个正整数N: 接下来N行,每行一个单词,长度不超过100 ...

  4. P1241 括号序列

    P1241 括号序列 题解 谁解释下标签递推是个什么鬼,应该是暴力 数据比较小直接跑暴力 但是注意题目描述 也就是说: [ ( ] ) 是不合法的 补全应该是 [ ] ( [ ] ) 举个栗子: 比如 ...

  5. 洛谷 1155 (NOIp2008)双栈排序——仔细分析不合法的条件

    题目:https://www.luogu.org/problemnew/show/P1155 这道题教会我们要多思考. 好好分析过后发现同一个栈里不能有升序.就用它写了一个30分. #include& ...

  6. 洛谷 P5658 括号树 题解

    原题链接 简要题意: 求出以从每个节点到根形成的括号序列的合法对数. 算法一 观察到 \(n \leq 8\) ,所以我们可以用 纯粹的暴力 . 用 \(O(n)\) 时间得出当前节点到根的字符串. ...

  7. 洛谷 P5470 - [NOI2019] 序列(反悔贪心)

    洛谷题面传送门 好几天没写题解了,写篇题解意思一下(大雾 考虑反悔贪心,首先我们考虑取出 \(a,b\) 序列中最大的 \(k\) 个数,但这样并不一定满足交集 \(\ge L\) 的限制,因此我们需 ...

  8. Luogu p1241 括号序列

    括号序列题目连接 这是一道与dp毫无半点关系的题 本来是去找的题来着,结果并没有找到,然后看到了这道题. (本来以为会是很好写的一道题结果因为题意不清直接原地去世了) 思路很简单,基本没有技术含量. ...

  9. BZOJ 1500 洛谷2042维护序列题解

    BZ链接 洛谷链接 这道题真是丧心病狂.... 应该很容易就可以看出做法,但是写代码写的....... 思路很简单,用一个平衡树维护一下所有的操作就好了,重点讲解一下代码的细节 首先如果按照常规写法的 ...

随机推荐

  1. php对字符串的操作3之 字符类型转换详解

    所有的数据输出到屏幕上,实际上被隐式的转换成了字符型,首先了解下各种数据类型的字符串表示 <?php echo 300,'<hr>'; echo true,'<hr>'; ...

  2. ubuntu14.04安装google chrome

    安装好Ubuntu14.04之后安装google chrome浏览器 1.按下 Ctrl + Alt + t 键盘组合键,启动终端 2.在终端中,输入以下命令 (将下载源加入到系统的源列表.命令的反馈 ...

  3. Kubernetes 升级记录:从 1.16.3 升级至 1.17.0

    参考官方文档 Upgrading kubeadm clusters 在 ubuntu 18.04 上完成了升级,记录一下升级步骤. 一.升级第一个 master 节点 apt-get 安装 kubea ...

  4. mysql修改密码的4种方式

    转:https://www.cnblogs.com/jdxn/p/6847089.html 方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set passw ...

  5. Bugku-CTF之web8(txt????)

    Day29  

  6. 生成树计数 lighting 最终决定用这个模板! (有逆元的模板)

    #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> # ...

  7. 快递查询API

    https://market.aliyun.com/products/56928004/cmapi014394.html#sku=yuncode839400000

  8. Springboot的多环境配置

    通常应用都会被安装到几个不同的环境(比如开发.测试.生产等),每个环境都会有一些参数是不一样的. Spring Boot对此也提供了支持,配置文件的名称只要满足application-{profile ...

  9. python进阶(十七)正则&json(上)

    1. 一个列表中所有的数字都是重复2次,但是有一个数字只重复了一次. 请找出重复一次的数字,不可以使用内置函数. [2,2,1,1,0,4,3,4,3] 方法1:通过字典计数,找到value等于1的k ...

  10. 小白学 Python 爬虫(27):自动化测试框架 Selenium 从入门到放弃(上)

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...