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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[css] 举例说明with属性的fill-available有什么应用场景

[css] 举例说明with属性的fill-available有什么应用场景 一些 div 元素默认宽度 100% 父元素&#xff0c;这种充分利用可用空间的行为就称为 fill-available。个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一…

第一部分 Java:面向对象理解

Java&#xff1a;面向对象理解、集合、IO、NIO、并发、反射源码分析 一.面向对象 1.创建对象的5种方式 (1)使用new关键字(2)使用Class类的newInstance方法(3)使用构造函数类的newInstance方法(4)使用clone方法 --》未实现Cloneable会报错(5)使用反序列化5动态代理2.this、sup…

[css] width属性的min-content和max-content有什么作用

[css] width属性的min-content和max-content有什么作用 max-content 在一个父元素上设置该元素后&#xff0c;元素的宽度会以子元素内最长的一个为准&#xff0c;子元素表现得会好像设置了white-space:nowrap一样一行展示min-content 在一个父元素上设置该元素后&#xff0c;子…

js拖拽

function drag(cla1,cla2,index){//鼠标可拖拽区域的dom&#xff0c;被拖拽的dom元素,索引var disX 0; //鼠标到dom元素左边距离var disY 0; //鼠标到dom元素上边距离var oDiv1 document.getElementsByClassName(cla1)[index];var oDiv2 document.getElementsByClassName(c…

[css] 你用过outline属性吗?它有什么运用场景

[css] 你用过outline属性吗&#xff1f;它有什么运用场景 outline &#xff08;轮廓&#xff09;是绘制于元素周围的一条线&#xff0c;位于边框边缘的外围&#xff0c;可起到突出元素的作用。个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#x…

Centos7搭建Java环境,并设置项目自启动脚本、定时数据库备份/日志清理脚本

开发环境下载&#xff0c;提供nginx-1.12.2、jdk-8u162、Jenkins下载 建个文件夹&#xff0c;作为开发环境存放路径 cd /usr mkdir developmentEnvironment cd /一.java 1.解压包 tar -zxvf jdk-8u162-linux-x64.tar.gz -C /usr/developmentEnvironment2.配置环境变量 vi…

【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--参数自动映射篇(6/8)...

文章目录 前情概要 路由、action的扫描、发现、注册搞定之后&#xff0c;后来我发现在我们的action里面获取参数往往都是通过request对象来一个一个获取。同样的一行代码我们不厌其烦的重复写了无数次。遂想着那我们能不能像后端程序一样做得更自动化一些呢&#xff1f; 所以&a…

Java String常用的数据类型转换

工作写代码经常遇到string的数据类型转换&#xff0c;每次都去搜索如何转换很不方便。写篇博客做个总结&#xff0c;以后看这篇就好了。 1.string-bigDecimal 2.string-date Testpublic void StringToDate() throws ParseException {Date date new SimpleDateFormat("yy…

深度学习之Batch Normalization

1、Batch Normalization的引入 在机器学习领域有个很重要的假设&#xff1a;IID独立同分布假设&#xff0c;也就是假设训练数据和测试数据是满足相同分布的&#xff0c;这是通过训练数据获得的模型能够在测试集上获得好的效果的一个基本保障。在深度学习网络中&#xff0c;后一…

[css] 为什么说css的选择器一般不要超过三级?

[css] 为什么说css的选择器一般不要超过三级&#xff1f; CSS的解析过程&#xff0c;在解析选择器的时候&#xff0c;是从右向左&#xff0c;从上到下及逆行解析的。 超过三级会使的css解析树复杂度呈指数级增加&#xff0c;降低css加载性能个人简介 我是歌谣&#xff0c;欢迎…

调用支付宝接口 alipay.data.bill.accountlog.query,提示:ISV权限不足

使用环境&#xff1a;正式环境 接口名称&#xff1a;alipay.data.bill.accountlog.query(支付宝商家账户账务明细查询) 提示&#xff1a;ISV权限不足&#xff0c;建议在开发者中心检查签约是否已经生效 参考&#xff1a; 支付宝商家账户账务明细查询接口文档 自己按照支付宝官…

工作309:uni-获取vuex里面的值

marketId:this.vuex_user.market_id

vue给同一元素绑定单击click和双击事件dblclick,执行不同逻辑

在做项目过程中&#xff0c;需求是点击孔位单击弹出对话框查看产品总数&#xff0c;双击弹出对话框查看详情。一开始直接click和dblclick写在标签里面&#xff0c;但是不管怎么样&#xff0c;总是执行单击事件 解决办法&#xff1a;利用计时器&#xff0c;在大概时间模拟双击事…

CentOS7 1.搭建环境脚本

公司没有专职运维&#xff0c;搭建服务器全部都是程序员操作。以前手动搭建需要1天时间&#xff0c;搭建过程很慢、很无聊&#xff0c;于是自己总结了如下脚本&#xff0c;执行完需要18分钟&#xff0c;以后再也不用苦逼的搭建环境了。 build.sh #!/bin/bashecho "新建de…

工作310:uni-初始获取数据onload

/* 第一步定义onload方法 */onLoad(){/* 调用市场信息的接口 分别 vuex获取 其他三项 */this.$u.api.getpartyList({marketId:this.vuex_user.market_id,type:"通知公告",pageNo:1,pageSize :20}).then(res>{if(res.data.code200){this.tableDatares.data.data.re…

LeetCode 258 Add Digits

leetcode 上做了一题比较有意思&#xff0c;记录一下&#xff0c;传送门&#xff1a;https://leetcode.com/problems/add-digits/description/ 题目意思是&#xff1a;给一个正整数a&#xff0c;让其个位&#xff0c;十位&#xff0c;百位一直到最高位加起来得到另一个数字b&am…

工作311:uni-携带当前参数跳转页面传值

第一步 <view v-for"(item,index) in tableData" click"getDetail(item.id)" class" box"><view class"u-line-1 u-m-b-24 u-font-30 color-3">{{item.title}}&#xff01;</view><view class"u-flex u-ro…

web自动化测试(java)---测试过程中遇到的错误合集

摸索测试&#xff0c;不管是安装、调测第一个用例都会遇到各种各样的问题&#xff0c;或是自己的问题或是程序本身设置问题 只有把所有问题记录下来&#xff0c;才对得起自己的经历 1、设置firefox的执行文件错误 Exception in thread "main" org.openqa.selenium.We…

CentOS7 3.项目持续交付脚本

#停止原有工程 ps -ef | grep demo | grep -v grep | awk {print $2} | xargs kill#删除原有工程 rm -rf /opt/app/demo.jar#解压压缩包指定文件&#xff0c;并存入指定路径 #tar -zxf 压缩包 -C 解压到的路径 压缩包中指定文件名 tar -zxf /opt/app/demo.tgz -C /opt/app .…

工作312:uni-弹出框显示数据

<template><view class"wrap"><u-form :model"form" :rules"rules" ref"uForm" :errorType"errorType"><u-form-item label"标题" label-width"140" style"margin-left:30rp…