题目链接:http://codeforces.com/problemset/problem/5/C 题目大意:给出一串字符串只有'('和')',求出符合括号匹配规则的最大字串长度及该长度的字串出现的次数.解题思路:设dp[i]为到i的最大括号匹配,我们每次遇到一个'('就将其下标存入栈中,每次遇到')'就取出当前栈中里它最近的'('下标即栈顶t.不能直接dp[i]=i-t+1,比如(()()())这样的例子就会出错,应为dp[i]=dp[i-1]+i-t+1. 代码 #include<bits/…
This is yet another problem dealing with regular bracket sequences. We should remind you that a bracket sequence is called regular, if by inserting «+» and «1» into it we can get a correct mathematical expression. For example, sequences «(())()», «()…
[链接]:CF [题意]:给你一个只含有括号的字符串,你可以将一种类型的左括号改成另外一种类型,右括号改成另外一种右括号 问你最少修改多少次,才能使得这个字符串匹配,输出次数 [分析]: 本题用到了栈.如果遇上左括号,就加进栈里.如果遇上右括号,就判断栈里的左括号是否和它匹配,不匹配就加一.不论匹不匹配,判断后都要让左括号出栈. 如果最后栈不为空,或者栈在循环结束前就为空,那么不论怎么改变,左右括号都不可能刚好匹配. [代码]: #include<cstdio> #include<cst…
(CodeForces - 5C)Longest Regular Bracket Sequence time limit per test:2 seconds memory limit per test:256 megabytes input:standard input output:standard output This is yet another problem dealing with regular bracket sequences. We should remind you t…
C. Longest Regular Bracket Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/problem/5/C Description This is yet another problem dealing with regular bracket sequences. We should remind you that a bracket sequence…
题目传送门 /* 题意:求最长括号匹配的长度和它的个数 贪心+stack:用栈存放最近的左括号的位置,若是有右括号匹配,则记录它们的长度,更新最大值,可以在O (n)解决 详细解释:http://blog.csdn.net/taoxin52/article/details/26012167 */ #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #includ…
题目 传送门:QWQ 分析 洛谷题解里有一位大佬讲的很好. 就是先用栈预处理出可以匹配的左右括号在数组中设为1 其他为0 最后求一下最长连续1的数量. 代码 #include <bits/stdc++.h> using namespace std; ; char s[maxn]; int vis[maxn], Stack[maxn], top; int main(){ scanf(); ); ;i<=n;i++){ if(s[i]=='('){ Stack[++top]=i; } els…
Almost Regular Bracket Sequence CodeForces - 1095E You are given a bracket sequence ss consisting of nn opening '(' and closing ')' brackets. A regular bracket sequence is a bracket sequence that can be transformed into a correct arithmetic expressio…
C. Replace To Make Regular Bracket Sequence 题目连接: http://www.codeforces.com/contest/612/problem/C Description You are given string s consists of opening and closing brackets of four kinds <>, {}, [], (). There are two types of brackets: opening and…
C. Replace To Make Regular Bracket Sequence time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You are given string s consists of opening and closing brackets of four kinds <>, {}, [], (). Th…
传送门 题意: 给你一个只包含 '(' 和 ')' 的长度为 n 字符序列s: 给出一个操作:将第 i 个位置的字符反转('(' ')' 互换): 问有多少位置反转后,可以使得字符串 s 变为"Regular Bracket Sequence": 输出满足条件的位置的个数: 题解: 令 '(' = 1 , ')' = -1: 定义 sum[i]:括号序列的前缀和: 一个合法的括号匹配串的充要条件是: [1] 对于任何 i,sum[i] ≥ 0: [2] sum[n]=0: int n;…
Replace To Make Regular Bracket Sequence You are given string s consists of opening and closing brackets of four kinds <>, {}, [], (). There are two types of brackets: opening and closing. You can replace any bracket by another of the same type. For…
You are given string s consists of opening and closing brackets of four kinds <>, {}, [], (). There are two types of brackets: opening and closing. You can replace any bracket by another of the same type. For example, you can replace < by the bra…
Regular Bracket Sequence time limit per test:1 second memory limit per test:256 megabytes input:standard input output:standard output A string is called bracket sequence if it does not contain any characters other than "(" and ")". A b…
题目地址:CF1095E Almost Regular Bracket Sequence 真的是尬,Div.3都没AK,难受QWQ 就死在这道水题上(水题都切不了,我太菜了) 看了题解,发现题解有错,不过还是看懂了QAQ 其实是一道好题 (话说CF的题有不好的么(雾 难在预处理 预处理两个数组: 前缀和:若 \(s_i\) 为 \((\) , \(s1_i=s1_{i-1}+1\) ,反之同理: 后缀和:若 \(s_i\) 为 \()\) , \(s2_i=s2_{i+1}+1\) ,反之亦同理…
Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向能夠讓整串變成合法. 前言 這題能幫助熟悉有關Regular Bracket Sequence的能夠維護的狀態. @copyright petjelinux 版權所有 觀看更多正版原始文章請至petjelinux的blog 想法 只要維護左括號為\(1\),右括號為\(-1\)的前(後)綴和,並維護…
Description We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a regular brackets sequence, if s is a regular brackets sequence, then (s) and [s] are regular brackets sequences, and if a and b are regul…
冲鸭,去刷题:http://codeforces.com/contest/1153/problem/C C. Serval and Parenthesis Sequence time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Serval soon said goodbye to Japari kindergarten, and b…
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output Recently Polycarp started to develop a text editor that works only with correct bracket sequences (abbreviated as CBS). Note that a bracket sequ…
Let us define a regular brackets sequence in the following way: 1. Empty sequence is a regular sequence. 2. If S is a regular sequence, then (S) and [S] are both regular sequences. 3. If A and B are regular sequences, then AB is a regular sequence. F…
这道题目能用区间dp来解决,是因为一个大区间的括号匹配数是可以由小区间最优化选取得到(也就是满足最优子结构) 然后构造dp 既然是区间类型的dp 一般用二维 我们定义dp[i][j] 表示i~j这个区间需要添加括号的数量 那么状态怎么转移呢? 第一种情况:对于i指向的括号 如果i+1 ~ j里面不存在与之匹配的括号 那么dp[i][j] =dp[i+1][j]+1; 第二种情况:对于i指向的括号 如果i+1~ j 里面存在与之匹配的括号下标我们记作k 那么在i+1 ~ j 中我们枚举所有的k d…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6299 题目: 题意:t组数据,每组数据给你一个n表示给你n个括号串,这n个括号串之间进行组合,求能够匹配的长度. 思路:用一个结构体来记录每个字符串的左括号和右括号的数量,在输入时将同串中能够匹配的直接消掉,最后剩余的字符绝对是所有的右括号在左边,左括号在右边,假设当前字符串为())(()(,我们一次将其标记为1~7,那么1和2可以匹配,5可以和6匹配,最后剩余347,也就是)((.我们紧接着就对n…
Codeforces Round #529 (Div. 3) 题目传送门 题意: 给你由左右括号组成的字符串,问你有多少处括号翻转过来是合法的序列 思路: 这么考虑: 如果是左括号 1)整个序列左括号个数比右括号多 2 2)在这个位置之前,所有位置的前缀左括号个数都不少于前缀右括号个数 3)在这个位置和这个位置之后,在修改后所有位置的前缀左括号个数减去前缀右括号个数大于2 (这里这么想,把左变成右,左-1,右+1) 右括号也是这样 代码: #include<bits/stdc++.h> usi…
题目链接:http://codeforces.com/contest/612/problem/C 解题思路: 题意就是要求判断这个序列是否为RBS,每个开都要有一个和它对应的关,如:<()>满足条件,但<(>)就不满足条件,反正直接就是用栈做就行了,完美符合题目要求. #include <bits/stdc++.h> using namespace std; stack<char>st; /*struct node{ int num,id; }a[20000…
题意:给你一串括号,每次仅可以修改一个位置,问有多少位置仅修改一次后所有括号合法. 题解:我们用栈来将这串括号进行匹配,每成功匹配一对就将它们消去,因为题目要求仅修改一处使得所有括号合法,所以栈中最后一定会有两个括号剩余,并且这两个括号要么是\(((\)要么是\())\),\()(\)是无论如何都不合法的,对于\())\),我们去找它左边的\()\)的个数贡献给答案(因为每次修改可以使[\((++\),\()--\)],所以栈中剩余的\())\)就没有了),对于\(((\)的情况也是一样的,我们…
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105116#problem/E 题意:添加最少的括号,让每个括号都能匹配并输出 分析:dp[i][j]表示第i个到第j个需要添加的最少的括号,pos[i][j] = k;表示i到j间第k个需要加括号: 如果str[i]和str[j]匹配,那么dp[i][j] = max(dp[i + 1][j - 1], dp[i][j]); 如果str[i]和str[j]不匹配,那么dp[i][j]…
题目链接:http://codeforces.com/contest/1095/problem/E 解题心得: 刚开始拿到这个题的时候还真的没什么思路,后来仔细想想还是比较简单的.首先题目要求翻转一个括号就要达到符合括号的匹配规则,那么在匹配完符合条件的括号之后有多出的两个括号向左或者向右. 其次从左边开始)不能比(多出两个以上,不然无法通过翻转一个得到符合规范的括号列,当刚好多出一个的时候这个括号必须翻转. #include <bits/stdc++.h> using namespace s…
题目链接 给一个字符串, 由( ) 以及? 组成, 将?换成( 或者 ) 组成合法的括号序列, 每一个?换成( 或者 ) 的代价都不相同, 问你最小代价是多少, 如果不能满足输出-1. 弄一个变量num, 如果是( 那么num++,如果是)那么num--. 如果碰到?, 那么先将这个地方弄成), 然后把make_pair(b-a, i)加到一个队列里面.a是换成左括号的值, b是换成右括号的值, i是这个位置的坐标. 如果遇到num小于0的情况, 那么就将队首元素取出, 将这个位置换成左括号.…
Description 给定一个长度为 \(n\) 的小括号序列,求有多少个位置满足将这个位置的括号方向反过来后使得新序列是一个合法的括号序列.即在任意一个位置前缀左括号的个数不少于前缀右括号的个数,同时整个序列左右括号个数相同 Input 第一行是一个整数 \(n\) 代表序列长度 下面一行是括号序列 Output 输出一行一个数字代表的答案 Hint \(1~\leq~n~\leq~10^6\) Solution 考虑一个位置,如果是左括号,那么能将其变成右括号当且仅当: 整个序列左括号个数…
POJ2955 匹配则加一,不需要初始化 //#include<bits/stdc++.h> #include<iostream> #include<cstdio> #include<algorithm> #include<vector> #include<cstring> #include<map> #include<set> #include<queue> #include<bitset&…