题意:

t组测试数据,每组数据有 n 个只由 '(' 和 ')' 构成的括号串。

要求把这 n 个串排序然后组成一个大的括号串,使得能够匹配的括号数最多。

如()()答案能够匹配的括号数是 4,(()) 也是 4。

例如:

n = 2

)

)((

你可以将其排序为))((,数目为0,也可以将其排序为)((),数目为1。

解法:

贪心。

把所有字符串中本身能够匹配的括号全部去掉,然后剩下的字符串只有三种:

1、全是 '('

2、全是 ')'

3、一串 ')' 加一串 '('

对于每一种字符串,如果 '(' 的数目多于 ‘)’,就把它放在前面,按照字符串中的 ‘)’ 从小到大排序。

         如果 ')' 的数目多于 ‘(’,就把它放在后面,按照字符串中的 ‘(’ 从大到小排序。

然后统计新串合法的括号数即可。

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std; #define maxn 100000 + 1000 struct Node
{
int x, y;
}a[maxn]; bool cmp(Node a, Node b)
{
if (a.x-a.y >= && b.x-b.y < ) return true;
if (a.x-a.y < && b.x-b.y >= ) return false;    // 左括号数目>右括号数目的,一定在右括号>左括号的前面
if (a.x-a.y >= && b.x-b.y >= ) return a.y < b.y;    //都是左括号比有括号多,按照右括号的数量从小到大排序
if (a.x-a.y < && b.x-b.y < ) return a.x > b.x;     //都是左括号比右括号少,按照左括号的数量从大到小排序
} int main()
{
int t;
scanf("%d", &t);
for (int ca = ; ca <= t; ca++)
{
int n, ans = ;
scanf("%d", &n);
for (int i = ; i <= n; i++)
{
char s[maxn];
scanf("%s", s);
a[i].x = a[i].y = ; //a[i].x 记录左括号的数量, a[i].y 记录右括号的数量。 for (int j = ; s[j] != '\0'; j++)
if (s[j] == ')')
{
if (a[i].x) {a[i].x--; ans++;}
else a[i].y++;
}
else a[i].x++;
      //括号匹配
} sort(a+, a++n, cmp); int instack = ;
for (int i = ; i <= n; i++)
{
if (a[i].y && instack)
{
ans += min(a[i].y, instack);
instack = max(, instack-a[i].y);
}
instack += a[i].x;
}
    //最后进行一次括号匹配,继续统计答案。 printf("%d\n", ans * );
} }

2018 Multi-University Training Contest 1 Balanced Sequence(贪心)的更多相关文章

  1. 2018 Multi-University Training Contest 1-1002 -Balanced Sequence(括号匹配+贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6299 题目: 题意:t组数据,每组数据给你一个n表示给你n个括号串,这n个括号串之间进行组合,求能够匹 ...

  2. 2015 Multi-University Training Contest 1 y sequence

    Y sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  3. hdu6299 Balanced Sequence 贪心

    题目传送门 题目大意:给出n个字符串,定义了平衡字符串,问这些字符串组合之后,最长的平衡字符子序列的长度. 思路: 首先肯定要把所有字符串先处理成全是不合法的,记录右括号的数量为a,左括号的数量为b, ...

  4. HDU - 6304(2018 Multi-University Training Contest 1) Chiaki Sequence Revisited(数学+思维)

    http://acm.hdu.edu.cn/showproblem.php?pid=6304 题意 给出一个数列的定义,a[1]=a[2]=1,a[n]=a[n-a[n-1]]+a[n-1-a[n-2 ...

  5. 2018 Nowcoder Multi-University Training Contest 2

    目录 Contest Info Solutions A. run D. monrey G. transform H. travel I. car J. farm Contest Info Practi ...

  6. 2018 Nowcoder Multi-University Training Contest 1

    Practice Link J. Different Integers 题意: 给出\(n\)个数,每次询问\((l_i, r_i)\),表示\(a_1, \cdots, a_i, a_j, \cdo ...

  7. 2018 Nowcoder Multi-University Training Contest 5

    Practice Link A. gpa 题意: 有\(n\)门课程,每门课程的学分为\(s_i\),绩点为\(c_i\),要求最多删除\(k\)门课程,使得gpa最高. gpa计算方式如下: \[ ...

  8. 2018 Nowcoder Multi-University Training Contest 10

    Practice Link J. Rikka with Nickname 题意: 给出\(n\)个字符串,要求依次合并两个串\(s, t\),满足将\(t\)合并到\(s\)中变成\(r\),使得\( ...

  9. HDU 6299 Balanced Sequence(贪心)

    题目:给出N个只有左右括号字符串 ,这N个字符串的排列顺序是任意的 , 问按最优的排序后 , 得到最多匹配的括号个数 分析: 我们很容易的想到 字符串)()()(( , 这样的字符串可以精简为)(( ...

随机推荐

  1. 课程增加功能(java web)

    1.设计思想 先写类DBUtil用来连接数据库.在UserDaoImpl2类中写在数据库中添加课程表信息的方法.然后定义类Calss2来写保存超级课表数据:课程名称,任课教师,上课地点的属性及其get ...

  2. 牛客网Java刷题知识点之子类继承不了父类里的(private属性、private方法、构造方法)

    不多说,直接上干货! 子类可以继承父类的属性和方法,除了那些private的外还有一样是子类继承不了的---构造器.对于构造器而言,它只能够被子类调用,而不能被子类继承. 调用父类的构造方法我们使用s ...

  3. springcloud-Netflix创建服务消费者

    目录 springcloud-Netflix创建服务消费者 Ribbon 创建服务消费者-Ribbon方式 ribbon的架构 Feign 创建包和基本项目结构 创建Feign访问服务的接口和访问co ...

  4. CentOS7.2安装MySql5.7并开启远程连接授权

    1.安装mysql5.7 CentOS 7之后的版本yum的默认源中使用MariaDB替代原先MySQL,因此安装方式较为以往有一些改变: 下载mysql的源 wget http://dev.mysq ...

  5. 移动端的300ms延迟和点击穿透

    移动端300ms延迟:假定这么一个场景.用户在 浏览器里边点击了一个链接.由于用户可以进行双击缩放或者双击滚动的操作,当用户一次点击屏幕之后,浏览器并不能立刻判断用户是确实要打开这个链接,还是想要进行 ...

  6. /usr/local/sbin/fping -s www.baidu.com www.google.com

    /usr/local/sbin/fping -s www.baidu.com www.google.com

  7. bt5r3开启远程登录

    sshd-generate /etc/init.d/ssh restart

  8. windows系统下Eclipse启动界面更改

    前段日子看到有人修改了linux系统下Eclipse的启动界面,因此自己试着修改了一下windows平台的启动界面.本文总结一下修改Eclipse 4.5(代号Mars)启动界面的方法. 方法一:修改 ...

  9. nginx只允许域名访问网址,禁止ip访问

    修改nginx配置 文件 在server段里插入如下正则: if ( $host != 'www.baidu.com') { return 403; } 说明:如果访问讨还不是www.baidu.co ...

  10. UVA11478 Halum (差分约束)

    每次操作是独立的,而且顺序并不影响,作用在同一个结点上的d可以叠加,所以令x(u) = sigma(dui). 最后就是要确定所有的x(u). 因为m越大,满足条件的边就越少,二分答案m. 对于一条边 ...