cf里好像经常出 这些题,一般贪心是搞不了的。。

918C 问有多少子段[l,r]满足合法括号

先从左往右扫,如果问号+‘(' 数量 >= ')' 说明这段区间的 ) 是满足条件的

然后再从右往左扫,如果问号+’)‘数量 >= '(' 说明这段区间的 ’(‘是满足条件的

这就是一个区间合法的充要条件

#include<bits/stdc++.h>
using namespace std;
#define maxn 5005
int mp[maxn][maxn];
int len;
char s[maxn];
int main(){
cin>>s;
len=strlen(s);
for(int i=;i<len;i++){
int a=,b=;
for(int j=i;j<len;j++){
if(s[j]==')')b++;
else a++;
if(a>=b)mp[i][j]++;
else break;
}
}
for(int i=len-;i>=;i--){
int a=,b=;
for(int j=i;j>=;j--){
if(s[j]=='(')b++;
else a++;
if(a>=b)mp[j][i]++;
else break;
}
}
int ans=;
for(int i=;i<len;i++)
for(int j=i;j<len;j++)
if(mp[i][j]== && (j-i)%)
ans++;
cout<<ans<<endl;
}

1153C 去掉开头末尾的括号匹配问题

问一个区间的[l,r]是否合法。。傻逼贪心明显错的啊

但是很傻比的题啊为什么我写不出来,

除了用上面那种扫两次的做法,还有一种做法是从左往右扫描,先凑出n/2个’(',然后模拟栈来匹配括号即可

#include<bits/stdc++.h>
using namespace std;
char s[];
int n;
int main(){
cin>>n>>s;
int cnt=,flag=,tot=;
if(s[]==')' || s[n-]=='(')flag=;
if(n<)flag=;
if(flag){puts(":(");return ;}
s[]='(',s[n-]=')'; for(int i=;i<n-;i++)
if(s[i]=='(')cnt++;
for(int i=;i<n-;i++)
if(s[i]=='?'){
if(cnt<(n-)/)s[i]='(',cnt++;
else s[i]=')';
}
cnt=;
for(int i=;i<n-;i++)
if(s[i]=='(')cnt++;
else {
if(cnt)cnt--;
else flag=;
}
if(flag || cnt){puts(":(");return ;}
cout<<s;
}

带问号的括号匹配问题918C 1153C的更多相关文章

  1. Codeforces 918C The Monster(括号匹配+思维)

    题目链接:http://codeforces.com/contest/918/problem/C 题目大意:给你一串字符串,其中有'('.')'.'?'三种字符'?'可以当成'('或者')'来用,问该 ...

  2. hdu4915 判断括号匹配

    题意:       问你括号匹配是否唯一,三种字符'(','?',')',问号可以变成任何字符. 思路:       首先我们要学会判断当前串是否成立?怎么判断?我的方法是跑两遍,开三个变变量 s1 ...

  3. 第六周PTA笔记 括号匹配调整+堆放石子+最大积分+168

    括号匹配调整 如果通过插入" +"和" 1"可以从中得到格式正确的数学表达式,则将带括号的序列称为正确的. 例如,序列 "(())()",& ...

  4. 括号匹配 区间DP (经典)

    描述给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来 ...

  5. YTU 3003: 括号匹配(栈和队列)

    3003: 括号匹配(栈和队列) 时间限制: 1 Sec  内存限制: 128 MB 提交: 2  解决: 2 [提交][状态][讨论版] 题目描述 假设一个表达式中只允许包含三种括号:圆括号&quo ...

  6. [原]NYOJ 括号匹配系列2,5

    本文出自:http://blog.csdn.net/svitter 括号匹配一:http://acm.nyist.net/JudgeOnline/problem.php?pid=2 括号匹配二:htt ...

  7. POJ C程序设计进阶 编程题#4:括号匹配问题

    编程题#4:扩号匹配问题 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 在某 ...

  8. 南阳理工ACM 括号匹配问题,并求出使得括号能够匹配需要新增的最小括号数(括号匹配(二))

    描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起 ...

  9. 【栈思想、DP】NYOJ-15 括号匹配(二)

    括号匹配(二) 描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能 ...

随机推荐

  1. 解决Jenkins邮件配置问题

    最近要配置Jenkins邮箱,由于一直报如下错误,又没办法解决,所以想到了另外的办法发邮件. 我采用shell脚本执行python命令的方式来发邮件: #!/bin/bash cd /software ...

  2. C#中使用JavaScriptSerializer类实现序列化与反序列化

    1.添加引用 JavaScriptSerializer类的使用需要引用System.Web.Extensions.dll文件,根据路径:C:\Program Files (x86)\Reference ...

  3. 数据标记系列——图像分割 & PolygonRNN++(二)

    实践 1.export PATH=~/anaconda3/bin:$PATH 2.Anaconda3 中创建新环境 Conda create –name=labelme_polyrnn_pp pyth ...

  4. MyBatis基础:MyBatis调用存储过程(6)

    1. 存储过程准备 CREATE PROCEDURE sp_task ( IN userId INT ) BEGIN SELECT * FROM task WHERE user_id = userId ...

  5. MySQL中 in和exists的区别

    A表: 100条数据 , B: 10条数据 select * from A where id in ( select aid from B ) 先执行括号里面的查询,然后执行外面,总共需要查询的次数的 ...

  6. Linux 学习 (六) 关机与重启命令

    Linux达人养成计划 I 学习笔记 shutdown [选项] 时间 -c:取消前一个关机命令 -h:关机 -r:重启 shutdown命令会在关机或重启时自动保存系统中正在运行的服务,最安全的关机 ...

  7. CSS属性速查表

    前面的话 本文将按照布局类属性.盒模型属性.文本类属性.修饰类属性这四个分类,对CSS常用属性进行重新排列,并最终设置为一份stylelintrc文件 布局类 1.定位 position z-inde ...

  8. [SCOI2009] 迷路

    题目类型:拆点, 矩阵快速幂 转化为矩阵快速幂,好题! 传送门:>Here< 题意:给出邻接矩阵,求\(1\)到\(N\)恰好长度为\(T\)的路径方案数 解题思路 如果题目给出的是一个\ ...

  9. unix文件系统中的硬链接和软连接

    硬链接: 一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名.但是,Unix/Linux系统允许,多个文件名指向同一个inode号码. 这意味着 ...

  10. PHP 加解密方法大全

    最近看见一篇文章讲的是PHP的加解密方法,正好也自己学习下,顺便以后有用到的地方也好能快速用上,仅供自己学习和复习,好了不多BB,上代码. 基于这几个函数可逆转的加密为:base64_encode() ...