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

P1241 括号序列 题目描述 定义如下规则序列(字符串): 1.空序列是规则序列: 2.如果S是规则序列,那么(S)和[S]也是规则序列: 3.如果A和B都是规则序列,那么AB也是规则序列. 例如,下面的字符串都是规则序列: (),[],(()),([]),()[],()[()] 而以下几个则不是: (,[,],)(,()),([() 现在,给你一些由‘(’,‘)’,‘[’,‘]’构成的序列,你要做的,是找出一个最短规则序列,使得给你的那个序列是你给出的规则序列的子列.(对于序列a1,a2,……
嗯... 题目链接:https://www.luogu.org/problem/P1241 首先这道题是栈的入门题的加强版, 不仅要你判断这个括号序列是否合法,还要你将这个序列补充完整... 一开始是没有头绪的,看到tj之后恍然大悟... 思路: 我们假设所有的括号都是不合法的,即都没有匹配,然后我们从头扫一遍,对于左括号的处理比较简单: 把所有左括号的下标存入q这个手写栈,然后把所有左括号对应的右括号存入b数组中. 然后对于右括号的处理比较复杂: 如果先前的左括号都已匹配或者栈顶的左括号不与之…
--接上一篇题解,[洛谷][单调栈]P1823音乐会的等待 关于题目大意在上一篇题解里已经说清楚了,这里不再多阐述 想看题目->戳这里 [算法分析:] 在对元素a进行判断时,如果它与栈顶元素相等,累加答案pop栈顶元素,在最后再把pop掉的相同的栈顶元素push进来 这样一个一个操作好慢啊! 可以有一种比较显著的优化: 记录每一种元素的值的同时记录它们的个数,这样在有相同元素的时候就不必一个一个pop累加再push而是可以直接累加上所有相同的元素. 同时相同的元素不必再进栈而是只用把栈顶(用de…
洛谷 P1628 合并序列 题目传送门 题目描述 有N个单词和字符串T,按字典序输出以字符串T为前缀的所有单词. 输入格式 输入文件第一行包含一个正整数N: 接下来N行,每行一个单词,长度不超过100: 最后一行包含字符串T. [数据规模] 对于60%的数据,满足1≤N≤1000: 对于100%的数据,满足1≤N≤100000且所有字符均为小写字母; 输出格式 按字典序升序输出答案. 输入输出样例 输入 #1复制 输出 #1复制 题解: 这道题有多种方法: 字典树(Trie树).排序.二叉堆..…
P1241 括号序列 题解 谁解释下标签递推是个什么鬼,应该是暴力 数据比较小直接跑暴力 但是注意题目描述 也就是说: [ ( ] ) 是不合法的 补全应该是 [ ] ( [ ] ) 举个栗子: 比如在找 “ ) ” 时,先找到了一个没有 ' ] ' 匹配的 ‘ [ ’ ,也就是说明出现了上述情况,即使后面找到了没有匹配的 "(" ,也不能算 “)”匹配了QAQ 代码 #include<iostream> #include<cstdio> #include<…
题目:https://www.luogu.org/problemnew/show/P1155 这道题教会我们要多思考. 好好分析过后发现同一个栈里不能有升序.就用它写了一个30分. #include<iostream> #include<cstdio> #include<cstring> using namespace std; ; ][N],top[],nw,tot,ps[N]; ]; bool flag; int main() { scanf(; stack[][]…
原题链接 简要题意: 求出以从每个节点到根形成的括号序列的合法对数. 算法一 观察到 \(n \leq 8\) ,所以我们可以用 纯粹的暴力 . 用 \(O(n)\) 时间得出当前节点到根的字符串. 然后 \(O(n^2)\) 枚举子串. 再用 \(O(n)\) 暴力判断(用栈). 时间复杂度: \(O(n^5)\). 实际得分: \(10pts\). 优化一 用 \(s_i\) 表示 \(i\) 号节点对应的括号. 用 \(h_i\) 表示当前节点到根的字符串. 用 \(fa_i\) 表示当前…
洛谷题面传送门 好几天没写题解了,写篇题解意思一下(大雾 考虑反悔贪心,首先我们考虑取出 \(a,b\) 序列中最大的 \(k\) 个数,但这样并不一定满足交集 \(\ge L\) 的限制,因此我们需要调整,我们假设 \(L-\) \(a,b\) 序列中最大的 \(k\) 个数的交集为 \(L'\),如果 \(L'\le 0\) 那不用调整直接输出即可.否则我们考虑每次调整部分 \(a_i,b_i\) 的取值使得 \(a,b\) 的交集加 \(1\),不难发现每次调整可能有以下可能: 选择两个下…
括号序列题目连接 这是一道与dp毫无半点关系的题 本来是去找的题来着,结果并没有找到,然后看到了这道题. (本来以为会是很好写的一道题结果因为题意不清直接原地去世了) 思路很简单,基本没有技术含量. 因为数据范围很小,我们可以直接进行暴搜: 定义bool 数组add表示第i个字符所对应的括号有没有被匹配,如果没有匹配需手动补全: 从左往右扫描,如果扫描到']'or')',从当前位置开始向左扫描,寻找配对括号,如果找到,将左右括号的add都置为1,break: 然后这么找大概就可以ac了叭? #i…
BZ链接 洛谷链接 这道题真是丧心病狂.... 应该很容易就可以看出做法,但是写代码写的....... 思路很简单,用一个平衡树维护一下所有的操作就好了,重点讲解一下代码的细节 首先如果按照常规写法的话,splay的节点要开到4000000, 直接炸飞, 由于任意时刻splay中的节点最多只有500000个,我们只需要开500000个节点就好了 然后将没有用的节点回收起来,下一次插入是插入到这些节点中 然后就是插入是将要插入的所有数字build成一颗平衡树,直接接在要插入的位置,这样会快很多 维…