题目链接

题意:

  给你一个含有(,),?的序列,每个?变成(或)有一定的花费,问变成课匹配的括号的最小花费。

分析:

  首先如果能变成匹配的,那么就有右括号的个数始终不多于左括号且左右括号数量相等,那就好办了,从头到尾跑一次就可以了,然后所有?变成),如果右括号多了,找一个变成左括号,当然一次最多变一个,然后用一个优先队列维护就好了。

  代码:

  

#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int maxn=5e4+;
char a[maxn];
int jl[maxn];
int bz[maxn];
int by[maxn];
priority_queue<pair<int,int> > qu;
int main(){
scanf("%s",a+);
int n=strlen(a+);
for(int i=;i<=n;i++){
if(a[i]=='?')
jl[i]=-;
if(a[i]==')')
jl[i]=;
}
for(int i=;i<=n;i++)
if(jl[i]==-)
scanf("%d%d",&bz[i],&by[i]);
int z=,y=;
long long ans=;
for(int i=;i<=n;i++){
if(!jl[i])
z++;
if(jl[i]==)
y++;
if(jl[i]==-){
y++;
jl[i]=;
ans+=(long long)by[i];
qu.push(make_pair(by[i]-bz[i],i));
}
if(y>z){
if(qu.empty()){
printf("-1");
return ;
}
y--;
z++;
ans-=(long long)qu.top().first;
jl[qu.top().second]=;
qu.pop();
}
}
if(y!=z){
printf("-1");
return ;
}
printf("%lld\n",ans);
for(int i=;i<=n;i++)
if(jl[i]==)
printf("(");
else
printf(")");
return ;
}

Least Cost Bracket Sequence,题解的更多相关文章

  1. CF3D Least Cost Bracket Sequence 题解

    题目 This is yet another problem on regular bracket sequences. A bracket sequence is called regular, i ...

  2. Codeforces Beta Round #3 D. Least Cost Bracket Sequence 优先队列

    D. Least Cost Bracket Sequence 题目连接: http://www.codeforces.com/contest/3/problem/D Description This ...

  3. Least Cost Bracket Sequence(贪心)

    Least Cost Bracket Sequence(贪心) Describe This is yet another problem on regular bracket sequences. A ...

  4. CF3D Least Cost Bracket Sequence 贪心

    Least Cost Bracket Sequence CodeForces - 3D 题目描述 This is yet another problem on regular bracket sequ ...

  5. cf3D Least Cost Bracket Sequence

    This is yet another problem on regular bracket sequences. A bracket sequence is called regular, if b ...

  6. CF524F And Yet Another Bracket Sequence 题解

    题目链接 算法:后缀数组+ST表+贪心   各路题解都没怎么看懂,只会常数巨大的后缀数组+ST表,最大点用时 \(4s\), 刚好可以过... 确定合法序列长度   首先一个括号序列是合法的必须满足以 ...

  7. 3 D. Least Cost Bracket Sequence

    题目大意: 这是一个规则的字符括号序列.一个括号序列是规则的,那么在序列里面插入‘+’ 和 ‘1’ 会得到一个正确的数学表达式. 合法:(())(), (),(()(())) 不合法:)(,((),( ...

  8. codeforces 3D . Least Cost Bracket Sequence 贪心

    题目链接 给一个字符串, 由( ) 以及? 组成, 将?换成( 或者 ) 组成合法的括号序列, 每一个?换成( 或者 ) 的代价都不相同, 问你最小代价是多少, 如果不能满足输出-1. 弄一个变量nu ...

  9. 【Codeforces 3D】Least Cost Bracket Sequence

    Codeforces 3 D 题意:有一个括号序列,其中一些位置是问号,把第\(i\)个问号改成(需要\(a_i\)的代价,把它改成)需要\(b_i\)的代价. 问使得这个括号序列成立所需要的最小代价 ...

随机推荐

  1. java创建透明背景的PNG图片加自定义文字水印

    人在码上走,需求天天有.这不,今天前端让我返回一个带自定义水印的背景图片.一通google,有现成的代码,但是基本是直接在源图上添加水印,生成出来的文字样式也没有控制好,看来又只有自己造轮子了. 过程 ...

  2. Windows内核驱动开发:HelloWorld

    测试信息 Dev Machine: Windows Version: 2004 (19041.264) WDK Version: 10.0.19041.1 SDK Version: 10.0.1904 ...

  3. 上位机开发之西门子PLC-S7通信实践

    写在前面: 就目前而言,在中国的工控市场上,西门子仍然占了很大的份额,因此对于上位机开发而言,经常会存在需要与西门子PLC进行通信的情况.然后对于西门子PLC来说,通信方式有很多,下面简单列举一下: ...

  4. jstl中<c:if>标签属性用法

    今天用jstl+el从session域中获取属性,遇到了问题 org.apache.jasper.JasperException: <h3>Validation error message ...

  5. 详解 Flink DataStream中min(),minBy(),max(),max()之间的区别

    解释 官方文档中: The difference between min and minBy is that min returns the minimum value, whereas minBy ...

  6. 2020/06/05 JavaScript高级程序设计 函数表达式

    函数表达式 函数定义的两种方式: 函数声明(函数声明提升,非标准name属性可访问给函数指定的名字) 函数声明提升:执行代码前先读取函数声明 function functionName(arg0, a ...

  7. Java 切割字符串的几种方式

    按效率排: 1.StringTokenizer切割 是java.util中的一个类,包含的api有: StringTokenizer的方法请参考上一篇. 其中,countTokens为length:n ...

  8. Nice Jquery Validator 【从 jQuery Validation 迁移】

    1. 初始化表单验证 .validate VS .validator jquery-validation : $("#myform").validate(options) nice ...

  9. ThreadLocal的使用场景分析

    目录 一.ThreadLocal介绍 二.使用场景1——数据库事务问题 2.1 问题背景 2.2 方案1-修改接口传参 2.3 方案2-使用ThreadLocal 三.使用场景2——日志追踪问题 四. ...

  10. Looooops(求解同余方程、同余方程用法)【拓展欧几里得】

    Looooops(点击) A Compiler Mystery: We are given a C-language style for loop of type for (variable = A; ...