传送门

题意:

  给你一个只包含 '(' 和 ')' 的长度为 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. Vue动态加载异步组件

    背景: 目前我们项目都是按组件划分的,然后各个组件之间封装成产品.目前都是采用iframe直接嵌套页面.项目中我们还是会碰到一些通用的组件跟业务之间有通信,这种情况下iframe并不是最好的选择,if ...

  2. 【arduino】anroid的app与arduino的ch05,进行蓝牙通信遇到的问题

    Arduino程序上传不成功 显示系统找不到指定文件 错误信息显示是 avrdude: ser_open(): can't open device "\\.\COM1": 系统找不 ...

  3. MySql实现Oracle的row_number()over(partition by ... order by ...)

    SELECT IF(t1.id = @id,@rownum := @rownum + 1,@rownum := 1)AS rownum, t1.*, @id := t1.id FROM (SELECT ...

  4. oracle中时间格式的转换

    1:取得当前日期是本月的第几周  select to_char(sysdate,'YYYYMMDD W HH24:MI:SS') from dual; TO_CHAR(SYSDATE,'YY') se ...

  5. Oracle中事物处理--事物隔离级别

    n  事物隔离级别 概念:隔离级别定义了事物与事物之间的隔离程度. ANSI/ISO SQL92标准定义了一些数据库操作的隔离级别(这是国际标准化组织定义的一个标准而已,不同的数据库在实现时有所不同) ...

  6. bzoj1191 超级英雄

    Description 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目,只有当选手正确回 ...

  7. N!分解素因子及若干问题【转载】

    这里写的非常好http://www.cnblogs.com/openorz/archive/2011/11/14/2248992.html,感谢博主,我这里就直接用了. 将N!表示成 N! = p1^ ...

  8. xib搭建scrollView无法滑动的问题

    最近给xib中的scrollView添加contentView的时候,view的约束总是参照莫名其妙的东西,不是frameLayout就是safeArea 因为之前都是默认以superView为参照系 ...

  9. ajax封装最后形态

    function obj1(obj) { obj.t = new Date().getTime(); var res = []; for (var key in obj) //url中不能出现中文 r ...

  10. Flask学习之十 全文搜索

    英文博客地址:blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-x-full-text-search 中文翻译地址:http://ww ...