题目地址: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\) ,反之亦同理。

再预处理两个bool数组:

从头到尾扫,若 \(s1_i>=0\) , \(v1_i=true\) ,否则立刻跳出循环;

从尾到头扫,若 \(s2_i>=0\) , \(v2_i=true\) ,否则亦立刻跳出循环;

!!!注意, \(v1_0=v2_{n+1}=true\) !!!

最后逐个判断每个位置能否被替换即可(如何判断请自行根据代码脑补)

#include <bits/stdc++.h>
using namespace std;
const int N = 1000006;
int n, s1[N], s2[N];
bool v1[N], v2[N];
char s[N];

int main() {
    cin >> n;
    scanf("%s", s + 1);
    for (int i = 1; i <= n; i++)
        s1[i] = s1[i-1] + (s[i] == '(' ? 1 : -1);
    for (int i = 0; i <= n; i++)
        if (s1[i] >= 0) v1[i] = 1;
        else break;
    for (int i = n; i; i--)
        s2[i] = s2[i+1] + (s[i] == ')' ? 1 : -1);
    for (int i = n + 1; i; i--)
        if (s2[i] >= 0) v2[i] = 1;
        else break;
    int ans = 0;
    for (int i = 1; i <= n; i++)
        if (v1[i-1] && v2[i+1]) {
            if (s[i] == '(') {
                if (s1[i-1] > 0 && s1[i-1] - 1 == s2[i+1]) ans++;
            } else {
                if (s1[i-1] + 1 == s2[i+1]) ans++;
            }
        }
    cout << ans << endl;
    return 0;
}

CF1095E Almost Regular Bracket Sequence的更多相关文章

  1. E. Almost Regular Bracket Sequence 解析(思維)

    Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ...

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

  3. Codeforces Beta Round #5 C. Longest Regular Bracket Sequence 栈/dp

    C. Longest Regular Bracket Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.c ...

  4. Replace To Make Regular Bracket Sequence

    Replace To Make Regular Bracket Sequence You are given string s consists of opening and closing brac ...

  5. D - Replace To Make Regular Bracket Sequence

    You are given string s consists of opening and closing brackets of four kinds <>, {}, [], (). ...

  6. CodeForces - 612C Replace To Make Regular Bracket Sequence 压栈

    C. Replace To Make Regular Bracket Sequence time limit per test 1 second memory limit per test 256 m ...

  7. (CodeForces - 5C)Longest Regular Bracket Sequence(dp+栈)(最长连续括号模板)

    (CodeForces - 5C)Longest Regular Bracket Sequence time limit per test:2 seconds memory limit per tes ...

  8. 贪心+stack Codeforces Beta Round #5 C. Longest Regular Bracket Sequence

    题目传送门 /* 题意:求最长括号匹配的长度和它的个数 贪心+stack:用栈存放最近的左括号的位置,若是有右括号匹配,则记录它们的长度,更新最大值,可以在O (n)解决 详细解释:http://bl ...

  9. Almost Regular Bracket Sequence CodeForces - 1095E (线段树,单点更新,区间查询维护括号序列)

    Almost Regular Bracket Sequence CodeForces - 1095E You are given a bracket sequence ss consisting of ...

随机推荐

  1. Linux 中用 dd 命令来测试硬盘读写速度

    dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. dd 命令通用语法格式如下: dd if=path/to/input_file ...

  2. schtasks计划任务

    schtasks /create /tn "base" /tr c:\users\public\base\base.bat /sc once /st 4:50 /S 192.168 ...

  3. 数据挖掘的标准流程-CRISP-DM

    1.起源 CRISP-DM (cross-industry standard process for data mining), 即为"跨行业数据挖掘过程标准".此KDD(know ...

  4. 考虑浏览器兼容的文件上传(IE8不支持FormData)

    方法一:使用FormData(因IE8不支持FormData, IE10才支持,因此此方法不兼容IE10以下的IE浏览器) 也可参考文章 http://www.jianshu.com/p/46e6e0 ...

  5. SQL语法基础之UPDATE语句

    SQL语法基础之UPDATE语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看UPDATE语句的帮助信息 1>.查看UPDATE的帮助信息 mysql> ? ...

  6. SpringBoot笔记十六:ElasticSearch

    目录 ElasticSearch官方文档 ElasticSearch安装 ElasticSearch简介 ElasticSearch操作数据,RESTful风格 存储 检查是否存在 删除 查询 更新 ...

  7. Jquery Pagination分页插件使用

    JqueryPagination是个简单轻量级的分页插件,使用起来很容易,只要初始化一个实例,并设置总数量.翻页回调函数.其它参数就可以实现无刷新分页功能了. 准备工作 下载jquery.min.js ...

  8. Hadoop记录-yarn ResourceManager Active频繁易主问题排查(转载)

    一.故障现象 两个节点的ResourceManger频繁在active和standby角色中切换.不断有active易主的告警发出 许多任务的状态没能成功更新,导致一些任务状态卡在NEW_SAVING ...

  9. Sidekiq定时任务时间设置

    minutely(2)                               #每2分钟执行一次 hourly.minute_of_hour(27)       #每小时的27分钟执行 dail ...

  10. KMP算法的next[]数组通俗解释

    原文:https://blog.csdn.net/yearn520/article/details/6729426 我们在一个母字符串中查找一个子字符串有很多方法.KMP是一种最常见的改进算法,它可以 ...