Codeforces Round #529 (Div. 3) E. Almost Regular Bracket Sequence(思维)
题意:
给你一个只包含 '(' 和 ')' 的长度为 n 字符序列s;
给出一个操作:将第 i 个位置的字符反转('(' ')' 互换);
问有多少位置反转后,可以使得字符串 s 变为"Regular Bracket Sequence";
输出满足条件的位置的个数;
题解:
令 '(' = 1 , ')' = -1;
定义 sum[i]:括号序列的前缀和;
一个合法的括号匹配串的充要条件是:
[1] 对于任何 i,sum[i] ≥ 0;
[2] sum[n]=0;
int n;
char s[maxn];
int sum[maxn];///前缀和
int a[maxn];///a[i]:min{sum[1,..,i]}
int b[maxn];///b[i]:min{sum[i,..,n]}
枚举位置 i,判断将位置 i 反转后序列是否变为 "Regular Bracket Sequence";
///i位置反转只会影响[i,n]的sum值
///首先要确保[1,i-1]序列满足条件[1]
///接着判断将i位置反转后
///①sum[n]±2是否为0
///②b[i]±2是否≥0
bool isSat(int i)///判断i位置反转后序列是否可以变为RBS
{
if(a[i-] < )
return false;
if(s[i] == ')')
return b[i]+ >= && sum[n]+ == ? true:false;
else
return b[i]- >= && sum[n]- == ? true:false;
}
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
const int maxn=1e6+; int n;
char s[maxn];
int sum[maxn];
int a[maxn];
int b[maxn]; ///i位置反转只会影响[i,n]的sum值
///首先要确保[1,i-1]序列满足条件[1]
///接着判断将i位置反转后
///①sum[n]±2是否为0
///②b[i]±2是否≥0
bool isSat(int i)///判断i位置反转后序列是否可以变为RBS
{
if(a[i-] < )///[1,i-1]不满足条件[1]
return false;
if(s[i] == '(')///'('变为')' i及其之后的sum-2
return b[i]- >= && sum[n]- == ? true:false;
else
return b[i]+ >= && sum[n]+ == ? true:false;
}
int Solve()
{
sum[]=;
for(int i=;i <= n;++i)
sum[i]=sum[i-]+(s[i] == '(' ? :-); a[]=INF;
for(int i=;i <= n;++i)
a[i]=min(sum[i],a[i-]);
b[n+]=INF;
for(int i=n;i >= ;--i)
b[i]=min(sum[i],b[i+]); int ans=;
for(int i=;i <= n;++i)
if(isSat(i))
ans++; return ans;
}
int main()
{
scanf("%d%s",&n,s+);
printf("%d\n",Solve()); return ;
}
Codeforces Round #529 (Div. 3) E. Almost Regular Bracket Sequence(思维)的更多相关文章
- Codeforces Round #529 (Div. 3) E. Almost Regular Bracket Sequence (思维,模拟栈)
题意:给你一串括号,每次仅可以修改一个位置,问有多少位置仅修改一次后所有括号合法. 题解:我们用栈来将这串括号进行匹配,每成功匹配一对就将它们消去,因为题目要求仅修改一处使得所有括号合法,所以栈中最后 ...
- Codeforces Round #529 (Div. 3) E. Almost Regular Bracket Sequence (思维)
Codeforces Round #529 (Div. 3) 题目传送门 题意: 给你由左右括号组成的字符串,问你有多少处括号翻转过来是合法的序列 思路: 这么考虑: 如果是左括号 1)整个序列左括号 ...
- Educational Codeforces Round 4 C. Replace To Make Regular Bracket Sequence 栈
C. Replace To Make Regular Bracket Sequence 题目连接: http://www.codeforces.com/contest/612/problem/C De ...
- Educational Codeforces Round 4 C. Replace To Make Regular Bracket Sequence
题目链接:http://codeforces.com/contest/612/problem/C 解题思路: 题意就是要求判断这个序列是否为RBS,每个开都要有一个和它对应的关,如:<()> ...
- # Codeforces Round #529(Div.3)个人题解
Codeforces Round #529(Div.3)个人题解 前言: 闲来无事补了前天的cf,想着最近刷题有点点怠惰,就直接一场cf一场cf的刷算了,以后的题解也都会以每场的形式写出来 A. Re ...
- CodeForces Round #529 Div.3
http://codeforces.com/contest/1095 A. Repeating Cipher #include <bits/stdc++.h> using namespac ...
- Codeforces Round #529 (Div. 3) 题解
生病康复中,心情很不好,下午回苏州. 刷了一套题散散心,Div 3,全部是 1 A,感觉比以前慢了好多好多啊. 这几天也整理了一下自己要做的事情,工作上要努力... ... 晚上还是要认认真真背英语的 ...
- Codeforces Round #556 (Div. 2) - C. Prefix Sum Primes(思维)
Problem Codeforces Round #556 (Div. 2) - D. Three Religions Time Limit: 1000 mSec Problem Descripti ...
- Codeforces Round #529 (Div. 3) C. Powers Of Two
http://codeforces.com/contest/1095/problem/C 题意:给n找出k个2的幂,加起来正好等于n.例如 9,4:9 = 1 + 2 + 2 + 4 思路:首先任何数 ...
随机推荐
- Codeforces Round #283 (Div. 2) A. Minimum Difficulty【一个数组定义困难值是两个相邻元素之间差的最大值。 给一个数组,可以去掉任意一个元素,问剩余数列的困难值的最小值是多少】
A. Minimum Difficulty time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- ConcurrentModificationException解决办法
package test.my.chap0302; import java.util.ArrayList; import java.util.Iterator; import java.util.Li ...
- UCloud-201809-001:Redis服务未授权访问漏洞安全预警
UCloud-201809-001:Redis服务未授权访问漏洞安全预警 尊敬的UCloud用户,您好! 发布时间 2018-09-11更新时间 2018-09-11漏洞等级 HighCVE编号 ...
- Mathematica 和 MATLAB、Maple 并称为三大数学软件
Mathematica是一款科学计算软件,很好地结合了数值和符号计算引擎.图形系统.编程语言.文本系统.和与其他应用程序的高级连接.很多功能在相应领域内处于世界领先地位,它也是使用最广泛的数学软件之一 ...
- c:if标签判断不为空和其他的值判断
今天用<c:if test=""></c:if>标签时 <c:if test="${sl.chc_status==1 }"> ...
- Nginx教程(一) Nginx入门教程 (转)
1 Nginx入门教程 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行.由俄罗斯的程序设计师IgorSysoev所开 ...
- django模型中auto_now和auto_now_add的区别
auto_now无论是你添加还是修改对象,时间为你添加或者修改的时间. auto_now_add为添加时的时间,更新对象时不会有变动. 补充: 创建类时:DateField表示年月日 DateTime ...
- iOS 微信支付如果遇到跳转只有一个确定请看这里
http://www.cocoachina.com/bbs/read.php?tid-321546.html 今天在联调微信支付,不得不说,和它比起来,阿里的支付sdk真的是太好用了.果然和后端同学在 ...
- virtualenv安装 以及在PyCharm中的使用
1.安装前条件 python3.7和 pip(可以使用这个命令升级python -m pip install --upgrade pip) 2.安装virtualenv pip install vir ...
- kendo grid 使用小结
需要注意的: 1. id,如果没有指定id则会导致create.update等操作无法正常使用. 头疼事项: 1. 服务端失败返回error数据.如果是编辑状态,还不能友好提示错误.当然可以使用大量代 ...