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 + 1000struct Node {int x, y; }a[maxn];bool cmp(Node a, Node b) {if (a.x-a.y >= 0 && b.x-b.y < 0) return true; if (a.x-a.y < 0 && b.x-b.y >= 0) return false; // 左括号数目>右括号数目的,一定在右括号>左括号的前面 if (a.x-a.y >= 0 && b.x-b.y >= 0) return a.y < b.y; //都是左括号比有括号多,按照右括号的数量从小到大排序if (a.x-a.y < 0 && b.x-b.y < 0) return a.x > b.x; //都是左括号比右括号少,按照左括号的数量从大到小排序 }int main() {int t;scanf("%d", &t);for (int ca = 1; ca <= t; ca++){int n, ans = 0;scanf("%d", &n);for (int i = 1; i <= n; i++){char s[maxn];scanf("%s", s);a[i].x = a[i].y = 0; //a[i].x 记录左括号的数量, a[i].y 记录右括号的数量。for (int j = 0; 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+1, a+1+n, cmp);int instack = 0;for (int i = 1; i <= n; i++){if (a[i].y && instack){ans += min(a[i].y, instack);instack = max(0, instack-a[i].y);}instack += a[i].x;} //最后进行一次括号匹配,继续统计答案。printf("%d\n", ans * 2);}}
转载于:https://www.cnblogs.com/ruthank/p/9371156.html
2018 Multi-University Training Contest 1 Balanced Sequence(贪心)相关推荐
- Multi-University Training Contest L - Wavel Sequence
在多校前,练练手,发现自己真的好菜. 一开始队友开了签到题,我随便一看看到了M,然后写了一个待修主席树,然后呢大概长这个样子 #include<iostream> #include< ...
- Sichuan University Programming Contest 2018 Preliminary
嗯为了防止大家AK,所以这次的A题和K题我们就当做不存在好了! 经历了昨天写了两个多小时的博客没保存的心态炸裂,今天终于下了个Markdown.所以我猜这篇的格式应该会更好看一点! 好吧废话不多说 题 ...
- 2018 Multi-University Training Contest 3 Problem F. Grab The Tree 【YY+BFS】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6324 Problem F. Grab The Tree Time Limit: 2000/1000 MS ...
- 2018 Multi-University Training Contest 4 Problem E. Matrix from Arrays 【打表+二维前缀和】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6336 Problem E. Matrix from Arrays Time Limit: 4000/20 ...
- 2021 HZNU Winter Training Day 17 (2018 German Collegiate Programming Contest (GCPC 18))
2021 HZNU Winter Training Day 17 (2018 German Collegiate Programming Contest (GCPC 18)) 题目 A B C D E ...
- 2018 Multi-University Training Contest 7 Age of Moyu
Age of Moyu 来追梦 Problem Description Mr.Quin love fishes so much and Mr.Quin's city has a nautical sy ...
- 2018 Multi-University Training Contest 1 部分简单题解析
Preface ACM系列赛第一站,没有进前200还是很伤的. 主要是T2当时没写出来就GG了,后来看了下其实不是很难. 题目按照比赛时我们A的顺序讲,其实我都是被陈潇然大佬和ZWC带飞的. T1 M ...
- HUST-2015 Multi-University Training Contest 9
2015 Multi-University Training Contest 9 solutions BY xudyh 1001.Expression 记dp_{l,r}dpl,r表示l,rl, ...
- 2016 Multi-University Training Contest 10
solved 7/11 2016 Multi-University Training Contest 10 题解链接 分类讨论 1001 Median(BH) 题意: 有长度为n排好序的序列,给两段子 ...
最新文章
- java 线程安全的原因_Java并发编程——线程安全性深层原因
- 【每周CV论文推荐】 初学深度学习图像分割必须要读的文章
- 邮件列表统计(网站推广)
- 【转】Beagleboard:BeagleBoneBlack
- 链接访问后刷新颜色回到初始_如何使链接可访问(提示:颜色不够)
- 【Python学习】 - sklearn - PCA降维相关
- jq之callback
- python读取mat文件报错【NotImplementedError: Please use HDF reader for matlab v7.3 files】
- spark 算子使用类变量_SparkCore的常用算子
- php新闻管理系统(简单)学习教程
- 各级期刊分类以及含金量//2021-2-4
- 小程序 用户反馈_用户反馈如何提高我的应用程序的安全性
- 【论文笔记】DR-TANet: Dynamic Receptive Temporal Attention Network for Street Scene Change Detection
- 网络游戏行业不能说的秘密
- 使用OpenCV实现Halcon算法(4)OpenCV实现边缘模板匹配算法
- 蓝桥杯实验4--按键之独立键盘(proteus仿真)
- c51单片机光电门测反应时间(实战小项目)
- GameframeWork框架—学习笔记
- 丘成桐中学生计算机科学竞赛,丘成桐计算机奖介绍,为什么要参加丘成桐奖?...
- 秋招历程——网易offer到手!