2018 Multi-University Training Contest 1 Balanced Sequence(贪心)
题意:
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(贪心)的更多相关文章
- 2018 Multi-University Training Contest 1-1002 -Balanced Sequence(括号匹配+贪心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6299 题目: 题意:t组数据,每组数据给你一个n表示给你n个括号串,这n个括号串之间进行组合,求能够匹 ...
- 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 ...
- hdu6299 Balanced Sequence 贪心
题目传送门 题目大意:给出n个字符串,定义了平衡字符串,问这些字符串组合之后,最长的平衡字符子序列的长度. 思路: 首先肯定要把所有字符串先处理成全是不合法的,记录右括号的数量为a,左括号的数量为b, ...
- 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 ...
- 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 ...
- 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 ...
- 2018 Nowcoder Multi-University Training Contest 5
Practice Link A. gpa 题意: 有\(n\)门课程,每门课程的学分为\(s_i\),绩点为\(c_i\),要求最多删除\(k\)门课程,使得gpa最高. gpa计算方式如下: \[ ...
- 2018 Nowcoder Multi-University Training Contest 10
Practice Link J. Rikka with Nickname 题意: 给出\(n\)个字符串,要求依次合并两个串\(s, t\),满足将\(t\)合并到\(s\)中变成\(r\),使得\( ...
- HDU 6299 Balanced Sequence(贪心)
题目:给出N个只有左右括号字符串 ,这N个字符串的排列顺序是任意的 , 问按最优的排序后 , 得到最多匹配的括号个数 分析: 我们很容易的想到 字符串)()()(( , 这样的字符串可以精简为)(( ...
随机推荐
- (转)Linux内核参数设置sysctl命令详解
Linux内核参数设置sysctl命令详解 原文:https://www.zhukun.net/archives/8064 sysctl是一个允许您改变正在运行中的Linux系统的接口. 它包含一些 ...
- opencv 形态学膨胀和腐蚀以及开运算和闭运算
- 《java学习三》并发编程 -------线程池原理剖析
阻塞队列与非阻塞队 阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞.试图从空的阻塞队列中获取元素的线程将会被阻塞,直到 ...
- 第十九章 排查和调试Web程序 之 防止和排查运行时问题
1. 概述 常见的几种运行时问题包括 错误数据.慢于预期的响应.未知行为 或者 未处理的异常. Visual Studio 提供了 排查.跟踪 和 日志 等工具 来帮助排查系统的问题.有些情况还需要插 ...
- linux 安装jdk (二进制文件安装)
1.下载jdk 此处以1.7 为例 :jdk-7u79-linux-x64.tar.gz 2.通过ssh将安装介质传到服务器 我一般放在 /opt 目录下 3.用tar 命令解压缩 tar -zx ...
- springboot集成shiro实现身份认证
github地址:https://github.com/peterowang/shiro pom文件 <dependencies> <dependency> <group ...
- jquery获取当前被选择的复选框的value的集合
1.HTML代码 <input type="checkbox" name="productID" value="0"> < ...
- Python+selenium之下载文件
一.Firefox文件下载 Web容许我们设置默认的文件下载路劲,文件会自动下载并且存放在指定的目录下. from selenium import webdriver import os fp = w ...
- C# 使用解析json 嵌套方法
C#从网页不传参数 接收json数据 public String GetHtmlFromUrl(String url) { //Response.Write(url); //Response.End( ...
- java面试题(杨晓峰)---第五讲String、StringBuffer、StringBuilder有什么区别?
线程 字符 操作频繁度 1 String (1)String的创建机制 由于String在java世界中使用过于频繁,java为了避免在一个系统中产生大量重复的String对象,引入了字符串常量池,其 ...