CodeForces 3 D.Least Cost Bracket Sequence(贪心+优先队列)
来源:互联网 发布:天意网络魔域一条龙 编辑:程序博客网 时间:2024/06/05 08:11
Description
给出一个括号序列,中间有一些问号,将第i个问号换成左括号代价是a[i],换成右括号代价是b[i],问如果用最少的代价将这个括号序列变成一个合法的括号序列
Input
第一行一个括号序列,假设其中有m个问号,则之后输入m行,每行两个整数a[i]和b[i]表示把第i个问号换成左括号或右括号的代价(括号序列长度不超过5e4,1<=a[i],b[i]<=1e6)
Output
如果不存在一种合理的替换方案使得该序列变成一个合法的括号序列则输出-1,否则输出最小代价和替换后的合法括号序列
Sample Input
(??)
1 2
2 8
Sample Output
4
()()
Solution
先把问号变成右括号,出问题了(序列不合法了)再把之前的问号变的右括号变成左括号,之前的代价是b[i]现在的代价是a[i],为使总代价最小我们从中选取a[i]-b[i]最小的即b[i]-a[i]最大的去重新变,所以用优先队列维护出现过的问号的b[i]-a[i]的值和其位置即可
Code
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<queue>#include<map>#include<set>#include<ctime>using namespace std;typedef long long ll;typedef pair<int,int>P;#define INF 0x3f3f3f3f#define maxn 55555char s[maxn];int a[maxn],b[maxn];priority_queue<P>que;int main(){ while(~scanf("%s",s)) { int len=strlen(s); ll ans=0; for(int i=0;i<len;i++) if(s[i]=='?') { scanf("%d%d",&a[i],&b[i]); ans+=b[i]; } int cnt=0,gg=0; while(!que.empty())que.pop(); for(int i=0;i<len;i++) { if(gg)break; if(s[i]=='(')cnt++; else { cnt--; if(s[i]=='?')que.push(P(b[i]-a[i],i)),s[i]=')'; if(cnt<0) { if(que.empty())gg=1; else { P temp=que.top(); que.pop(); ans-=temp.first; cnt+=2; s[temp.second]='('; } } } } if(cnt!=0)gg=1; if(gg)printf("-1\n"); else printf("%I64d\n%s\n",ans,s); } return 0;}
阅读全文
0 0
- CodeForces 3D Least Cost Bracket Sequence (贪心+优先队列)
- CodeForces 3D Least Cost Bracket Sequence (贪心+优先队列)
- CodeForces 3 D.Least Cost Bracket Sequence(贪心+优先队列)
- Codeforces Beta Round #3 D. Least Cost Bracket Sequence 贪心 优先队列
- Codeforces 3D Least Cost Bracket Sequence 贪心
- Codeforces 3D Least Cost Bracket Sequence (贪心)
- Codeforces 3D Least Cost Bracket Sequence --- 贪心
- Codeforces 3D Least Cost Bracket Sequence [贪心]
- Codeforces 3D Least Cost Bracket Sequence(贪心)
- D. Least Cost Bracket Sequence (贪心)
- CodeForces 3D Least Cost Bracket Sequence
- codeforces 3D Least Cost Bracket Sequence
- Codeforces 3D. Least Cost Bracket Sequence
- CodeForces 3D. Least Cost Bracket Sequence
- CodeForces 3D-Least Cost Bracket Sequence
- CodeForces 3D Least Cost Bracket Sequence
- Codeforces 3D Least Cost Bracket Sequence
- codeforce 3D. Least Cost Bracket Sequence(贪心)
- 数组常用方法
- Lightoj 1122【计数DP】
- MySQL连接失败:Can't connect to MySQL server on '127.0.0.1'
- NIO
- Redis 事务
- CodeForces 3 D.Least Cost Bracket Sequence(贪心+优先队列)
- 如何在字符串的长时间("2017-07-18 00:00:00")上对短时间("yyyy-mm-dd")分组和排序
- ble之gatt server
- 位运算实现加减乘除四则运算
- Codeforces 825D Suitable Replacement【贪心】水题
- Git for windows 配置
- 内存映射文件:MappedByteBuffer
- Hadoop基本概念
- ajax+json+Struts2实现list传递