传送门

题意:

  给你一个只包含 '(' 和 ')' 的长度为 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(思维)的更多相关文章

  1. Codeforces Round #529 (Div. 3) E. Almost Regular Bracket Sequence (思维,模拟栈)

    题意:给你一串括号,每次仅可以修改一个位置,问有多少位置仅修改一次后所有括号合法. 题解:我们用栈来将这串括号进行匹配,每成功匹配一对就将它们消去,因为题目要求仅修改一处使得所有括号合法,所以栈中最后 ...

  2. Codeforces Round #529 (Div. 3) E. Almost Regular Bracket Sequence (思维)

    Codeforces Round #529 (Div. 3) 题目传送门 题意: 给你由左右括号组成的字符串,问你有多少处括号翻转过来是合法的序列 思路: 这么考虑: 如果是左括号 1)整个序列左括号 ...

  3. 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 ...

  4. Educational Codeforces Round 4 C. Replace To Make Regular Bracket Sequence

    题目链接:http://codeforces.com/contest/612/problem/C 解题思路: 题意就是要求判断这个序列是否为RBS,每个开都要有一个和它对应的关,如:<()> ...

  5. # Codeforces Round #529(Div.3)个人题解

    Codeforces Round #529(Div.3)个人题解 前言: 闲来无事补了前天的cf,想着最近刷题有点点怠惰,就直接一场cf一场cf的刷算了,以后的题解也都会以每场的形式写出来 A. Re ...

  6. CodeForces Round #529 Div.3

    http://codeforces.com/contest/1095 A. Repeating Cipher #include <bits/stdc++.h> using namespac ...

  7. Codeforces Round #529 (Div. 3) 题解

    生病康复中,心情很不好,下午回苏州. 刷了一套题散散心,Div 3,全部是 1 A,感觉比以前慢了好多好多啊. 这几天也整理了一下自己要做的事情,工作上要努力... ... 晚上还是要认认真真背英语的 ...

  8. Codeforces Round #556 (Div. 2) - C. Prefix Sum Primes(思维)

    Problem  Codeforces Round #556 (Div. 2) - D. Three Religions Time Limit: 1000 mSec Problem Descripti ...

  9. 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 思路:首先任何数 ...

随机推荐

  1. 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 ...

  2. ConcurrentModificationException解决办法

    package test.my.chap0302; import java.util.ArrayList; import java.util.Iterator; import java.util.Li ...

  3. UCloud-201809-001:Redis服务未授权访问漏洞安全预警

    UCloud-201809-001:Redis服务未授权访问漏洞安全预警 尊敬的UCloud用户,您好! 发布时间  2018-09-11更新时间  2018-09-11漏洞等级  HighCVE编号 ...

  4. Mathematica 和 MATLAB、Maple 并称为三大数学软件

    Mathematica是一款科学计算软件,很好地结合了数值和符号计算引擎.图形系统.编程语言.文本系统.和与其他应用程序的高级连接.很多功能在相应领域内处于世界领先地位,它也是使用最广泛的数学软件之一 ...

  5. c:if标签判断不为空和其他的值判断

    今天用<c:if test=""></c:if>标签时 <c:if test="${sl.chc_status==1 }"> ...

  6. Nginx教程(一) Nginx入门教程 (转)

    1 Nginx入门教程 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行.由俄罗斯的程序设计师IgorSysoev所开 ...

  7. django模型中auto_now和auto_now_add的区别

    auto_now无论是你添加还是修改对象,时间为你添加或者修改的时间. auto_now_add为添加时的时间,更新对象时不会有变动. 补充: 创建类时:DateField表示年月日 DateTime ...

  8. iOS 微信支付如果遇到跳转只有一个确定请看这里

    http://www.cocoachina.com/bbs/read.php?tid-321546.html 今天在联调微信支付,不得不说,和它比起来,阿里的支付sdk真的是太好用了.果然和后端同学在 ...

  9. virtualenv安装 以及在PyCharm中的使用

    1.安装前条件 python3.7和 pip(可以使用这个命令升级python -m pip install --upgrade pip) 2.安装virtualenv pip install vir ...

  10. kendo grid 使用小结

    需要注意的: 1. id,如果没有指定id则会导致create.update等操作无法正常使用. 头疼事项: 1. 服务端失败返回error数据.如果是编辑状态,还不能友好提示错误.当然可以使用大量代 ...