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

【题意】

在这里输入题意

【题解】

我们贪心地把每一个括号序列能匹配都按照栈的规则都匹配出来。
(直接递增匹配对数*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. php strtotime 同样的函数为何在不同的地方输出的结果不同?

    方法1:调用函数 date_default_timezone_set('Asia/Shanghai'); // 如果是中国的话 方法2:设置php.ini 中data.timezone [Date] ...

  2. MySQL 函数大全及用法示例

    1.字符串函数ascii(str)   返回字符串str的第一个字符的ascii值(str是空串时返回0)  mysql> select ascii('2');  -> 50  mysql ...

  3. CF47A Triangular numbers

    CF47A Triangular numbers 题意翻译 给定一个数n,问你是否存在一个整数i,满足i*(i+1)/2=n. 若存在,输出"YES",否则输出"NO&q ...

  4. 怎样改动 VC6.0 4.0 2010 打印预览界面上的文字

    前言:尽管早已下决心不再碰微软的东西,但手头的项目还得须要维护. 遇到问题还能解决. 问题由来: 之前的软件开发是基于中文环境开发的,建立项目的时候,选择了中文,为了方便客户使用.我们使用了静态编译的 ...

  5. 为什么mysql中用\G表示按列方式显示

    关于mysql的错误 - no query specified 学习了:http://blog.csdn.net/tenfyguo/article/details/7566941 sql语句可以用分号 ...

  6. 学习笔记一:关于directx sdk的安装于一些概念

    关于directx sdk开发环境的安装: 在百度搜索了directx sdk,进入了微软的官网,下载了DXSDK_Jun10.exe 百度网盘:http://pan.baidu.com/s/1o6r ...

  7. angularjs1-6,自定义服务

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  8. firewall 允许app访问网络

    https://www.wikihow.com/Block-a-Program-with-Windows-Firewall 打开windows firewall change settings 然后就 ...

  9. redis配置外部访问

    iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT 开放6379端口

  10. 【BZOJ 2453】 维护队列

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2453 [算法] 带修改的莫队算法 当块的大小为N^(2/3)时,时间复杂度为 : O ...