【HDOJ6299】Balanced Sequence(贪心)
2024-09-30 13:14:15
题意:给定n个只有左右括号的序列,要求将它们重新排序使得匹配的括号对数最大。
n<=1e5
s[i]<=1e5
sum s[i]<=5e6
思路:
先把每个串内部的匹配数量减去,剩下的就是不匹配的左右括号数量
对于左括号数量大于右括号的串,按右括号数量从小到大排序
对于右括号数量大于左括号的串,按左括号数量从大到小排序
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef vector<int> VI;
#define fi first
#define se second
#define MP make_pair int read()
{
int v=, f=;
char c=getchar();
while (c<||<c) {if(c=='-') f=-; c=getchar();}
while (<=c&&c<=) v=(v<<)+v+v+c-, c=getchar();
return v*f;
} const int N=;
int a[N],b[N],n,ans;
char ch[N];
PII A[N],B[N],C[N]; bool cmp1(const PII &a,const PII &b)
{
return a.fi<b.fi;
} bool cmp2(const PII &a,const PII &b)
{
return a.se>b.se;
} int main()
{ int cas=read();
while(cas--)
{
n=read();
int ans=;
for(int i=;i<=n;i++)
{
scanf("%s",ch+);
a[i]=b[i]=;
int now=;
for(int j=;ch[j];j++)
if(ch[j]==')')
{
if(now) now--,ans++;
else a[i]++;
}
else now++;
b[i]=now;
for(int j=;ch[j];j++) ch[j]=;
}
for(int i=;i<=n;i++) A[i]=MP(a[i],b[i]);
int len1=,len2=;
for(int i=;i<=n;i++)
if(a[i]<b[i]) B[++len1]=A[i];
else C[++len2]=A[i];
sort(B+,B+len1+,cmp1);
sort(C+,C+len2+,cmp2);
int now=;
for(int i=;i<=len1;i++)
{
ans+=min(now,B[i].fi);
now-=min(now,B[i].fi);
now+=B[i].se;
}
for(int i=;i<=len2;i++)
{
ans+=min(now,C[i].fi);
now-=min(now,C[i].fi);
now+=C[i].se;
}
printf("%d\n",ans*);
}
return ;
}
最新文章
- 微信小程序-视图模板
- php dirname(__FILE__) 获取当前文件的绝对路径 (转)
- EGO Refresh小总结
- 免费在线客服QQ_网页接入及使用说明
- Node.js深受欢迎的六大原因
- 540B :School Marks
- php测试代码工具类
- Python 一路走来 DOM &; Jquery
- java设计模式-工厂模式(springweb为例子)
- nodejs轻量级时间格式化组件Moment.js的使用例子
- 使用sftp操作文件并添加事务管理
- lock 单例模式
- SpringBoot之配置文件加载位置
- TCP协议和UDP协议基础介绍
- eclipse怎么删除多余的tomcat server(2)
- window service 开发
- VS 星期作业 if else的应用 做一个受不受异性欢迎的小程序
- SSM项目 单元测试中 注入bean 空指针异常
- Jmeter(三十九)获取响应结果中参数出现的次数(转载)
- 37.Linux驱动调试-根据oops的栈信息,确定函数调用过程