【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

我们贪心地把每一个括号序列能匹配都按照栈的规则都匹配出来。
(直接递增匹配对数*2就可以了
最后栈里面就只剩下类似))))(((((((这样的形式了。
现在就相当于有很多个这种字符串了。
让你把它们拼接在一起。
可以用sort贪心一下。
优先把(多的序列放在前面一点。
具体的比较函数这么写
里注释的括号用于参考
(实在不知道原理,就一种一种猜吧。。。。
sort完之后再模拟一下括号匹配就好
```cpp
bool operator //))))((((( (((((
if (left_brackets>right_brackets){
//))((((((((((((((
if (b.left_brackets>b.right_brackets)
return right_brackets<b.right_brackets;//都是左括号比较少。那么就右括号少一点的放左边。
else //b.left<=b.right
//))))))))))((
return true;//看上去右括号那么多,就放后面一点吧。。多一点匹配数。
}else{

//)))))))))))(((
//left_brackets<=right_brackets
if (b.left_brackets<=b.right_brackets){ //都是右括号比较多。就让他少祸害一点。让左括号多的放左边.
//))))))))))))))((
return left_brackets>b.left_brackets;
}else{
//)))))((((((((((((((
return false; //如果这个左括号那么多的话,就放左边去吧。
}
}
}

</font>

<font color = black size = 6> 【代码】</font>
```cpp
#include <bits/stdc++.h>
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define all(x) x.begin(),x.end()
#define pb push_back
#define lson l,mid,rt<<1
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%lld",&x)
#define res(x) scanf("%s",x)
#define rson mid+1,r,rt<<1|1
using namespace std; const double pi = acos(-1);
const int dx[4] = {0,0,1,-1};
const int dy[4] = {1,-1,0,0};
const int N = 1e5; struct abc{
int right_brackets,left_brackets;
//))))))))((
//))(((((((((((
bool operator < (const abc &b) const{ //))))((((( (((((
if (left_brackets>right_brackets){
//))((((((((((((((
if (b.left_brackets>b.right_brackets)
return right_brackets<b.right_brackets;
else //b.left<=b.right
//))))))))))((
return true;
}else{ //)))))))))))(((
//left_brackets<=right_brackets
if (b.left_brackets<=b.right_brackets){
//))))))))))))))((
return left_brackets>b.left_brackets;
}else{
return false;
}
}
}
}a[N+10]; int n;
char s[N+10];
int sta[N+10]; int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "r", stdin);
#endif
int T;
rei(T);
while(T--){
long long ans = 0;
rei(n);
for (int i = 1;i <= n;i++){
a[i].left_brackets = a[i].right_brackets = 0;
res(s);
int len = strlen(s);
int top = 0;
for (int j = 0;j < len;j++)
if (s[j]==')'){
if (top>0 && sta[top]==0){
top--;
ans+=2;
}else
sta[++top] = 1;
}else{
sta[++top] = 0;
}
rep1(j,1,top)
if (sta[j]==1)
a[i].right_brackets++;
else
a[i].left_brackets++;
}
sort(a+1,a+1+n);
int now = 0;
rep1(i,1,n){
int temp = min(now,a[i].right_brackets);
now-=temp;
ans+=(temp*2);
now+=a[i].left_brackets;
}
printf("%lld\n",ans);
}
return 0;
}

【HDU 6299】Balanced Sequence的更多相关文章

  1. 【HDU 1005】 Number Sequence

    [题目链接] 点击打开链接 [算法] 矩阵乘法快速幂,即可 [代码] #include<bits/stdc++.h> using namespace std; int a,b,n; str ...

  2. 【HDU 3709】 Balanced Number (数位DP)

    Balanced Number Problem Description A balanced number is a non-negative integer that can be balanced ...

  3. 【HDU - 1560】DNA sequence (dfs+回溯)

    DNA sequence 直接中文了 题目描述 21世纪是生物科技飞速发展的时代.我们都知道基因是由DNA组成的,而DNA的基本组成单位是A,C,G,T.在现代生物分子计算中,如何找到DNA之间的最长 ...

  4. 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题

    [HDU  3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...

  5. 【HDU 5647】DZY Loves Connecting(树DP)

    pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...

  6. -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】

    [把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...

  7. 【HDU 2196】 Computer(树的直径)

    [HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...

  8. 【HDU 2196】 Computer (树形DP)

    [HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...

  9. 【HDU 5145】 NPY and girls(组合+莫队)

    pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...

随机推荐

  1. D - Constructing Roads

    D - Constructing Roads 思路:并查集板子 #include<cstdio> #include<cstring> #include<iostream& ...

  2. 关于工作,学习中定时备份的几个方法(cron,git,mail)

    首先介绍一下cron这个定时备份的工具: crontab -e : 运行文字编辑器来设定时程表,内定的文字编辑器是 VI.假设你想用别的文字编辑器.则请先设定 VISUAL 环境变数来指定使用那个文字 ...

  3. linux入门基础——linux用户基础

    这篇内容是linux用户基础,相关内容见linux改动username和ubuntu改动username和主机名. 用户.组 当我们使用linux时,须要以一个用户的身份登入,一个进程也须要以一个用户 ...

  4. Bridge模式

    Bridge模式 Bridge模式 在面向对象的开发过程中,要做到2点:1.高内聚(cohesion).2.松耦合(coupling).可是在实际开发过程中难以把握,比如会遇到这种问题: 1)客户给了 ...

  5. Log4J日志配置具体解释

    一.Log4j简单介绍 Log4j有三个基本的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综 ...

  6. Suffix Array 后缀数组

    后缀数组 顾名思义.SuffixArray(下面有时简称SA) 和字符串的后缀有关. 后缀:字符串中某个位置一直到结尾的子串.(SA中讨论包含了原串和空串).所以共同拥有len+1个后缀. 后缀数组: ...

  7. 0x18 总结与练习

    这一章不太满意啊.. 还是有点痛苦,但就是做的挺慢啊... 1.就是例题 2.括号画家 感觉这种提高组类型的细节题都没什么信心啊,fail了几次才A #include<cstdio> #i ...

  8. hdoj--2579--Dating with girls(2)(搜索+三维标记)

    Dating with girls(2) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  9. intelliJ idea运行新的test功能时,报错:class not found "....." empty test suite

    转自:https://blog.csdn.net/u012560212/article/details/75037578

  10. 知网下载pdf文件的方法

    title: 知网下载pdf文件的方法 toc: false date: 2018-11-02 17:54:43 categories: methods tags: 知网 平时我们使用的是国内版的知网 ...