【HDU 6299】Balanced Sequence
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
我们贪心地把每一个括号序列能匹配都按照栈的规则都匹配出来。
(直接递增匹配对数*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的更多相关文章
- 【HDU 1005】 Number Sequence
[题目链接] 点击打开链接 [算法] 矩阵乘法快速幂,即可 [代码] #include<bits/stdc++.h> using namespace std; int a,b,n; str ...
- 【HDU 3709】 Balanced Number (数位DP)
Balanced Number Problem Description A balanced number is a non-negative integer that can be balanced ...
- 【HDU - 1560】DNA sequence (dfs+回溯)
DNA sequence 直接中文了 题目描述 21世纪是生物科技飞速发展的时代.我们都知道基因是由DNA组成的,而DNA的基本组成单位是A,C,G,T.在现代生物分子计算中,如何找到DNA之间的最长 ...
- 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题
[HDU 3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...
- 【HDU 5647】DZY Loves Connecting(树DP)
pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...
- -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】
[把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...
- 【HDU 2196】 Computer(树的直径)
[HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...
- 【HDU 2196】 Computer (树形DP)
[HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...
- 【HDU 5145】 NPY and girls(组合+莫队)
pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...
随机推荐
- CF789A. Anastasia and pebbles
/* CF789A. Anastasia and pebbles http://codeforces.com/contest/789/problem/A 水题 题意:有两个背包,每次分别可取k个物品, ...
- codevs——T3657 括号序列
http://codevs.cn/problem/3657/ 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description ...
- Ubuntu14.04.1安装搜狗拼音输入法
之前在Ubuntu16.04下安装过搜狗,在印象中与这次遇到的问题不一样,因此先说明一下这次Ubuntu的版本号: 参考博客http://blog.csdn.net/tao_627/article/d ...
- POJ 1950
直接DFS,因为实在没想到什么剪枝了... 注意一点是,10.11使用的是1011哦 #include <iostream> #include <cstdio> #includ ...
- HDOJ 3339 In Action
最短路+01背包 In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- .net mvc Model 验证总结
ASP.NET MVC4中的Model是自验证的,这是通过.NET4的System.ComponentModel.DataAnnotations命名空间完毕的. 我们要做的仅仅是给Model类的各属性 ...
- linux删除多行
光标放到行dd:删除所在行 光标放到行Ndd: 删除所在行下的N行
- c13--数组
// // main.c // 进制查表法 // // Created by xiaomage on 15/6/10. // Copyright (c) 2015年 xiaomage. All rig ...
- kentico中的page template的使用
父页面使用自己的template 子页面,也使用自己的template. 然后父页面中需要添加一个place holder. 子页面的继承,选择inherit only master page. 这样 ...
- redis主从复制,读写分离
主从复制,读写分离 Master/Slave 是什么 master写入 slave读取 能干嘛 读写分离,更加安全,性能提升 怎么玩 一主二仆.薪火相传.反客为主 周明老师,能够把长篇大论总结的很精辟 ...