Least Cost Bracket Sequence,题解
题目链接
题意:
给你一个含有(,),?的序列,每个?变成(或)有一定的花费,问变成课匹配的括号的最小花费。
分析:
首先如果能变成匹配的,那么就有右括号的个数始终不多于左括号且左右括号数量相等,那就好办了,从头到尾跑一次就可以了,然后所有?变成),如果右括号多了,找一个变成左括号,当然一次最多变一个,然后用一个优先队列维护就好了。
代码:
#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,题解的更多相关文章
- CF3D Least Cost Bracket Sequence 题解
题目 This is yet another problem on regular bracket sequences. A bracket sequence is called regular, i ...
- Codeforces Beta Round #3 D. Least Cost Bracket Sequence 优先队列
D. Least Cost Bracket Sequence 题目连接: http://www.codeforces.com/contest/3/problem/D Description This ...
- Least Cost Bracket Sequence(贪心)
Least Cost Bracket Sequence(贪心) Describe This is yet another problem on regular bracket sequences. A ...
- CF3D Least Cost Bracket Sequence 贪心
Least Cost Bracket Sequence CodeForces - 3D 题目描述 This is yet another problem on regular bracket sequ ...
- cf3D Least Cost Bracket Sequence
This is yet another problem on regular bracket sequences. A bracket sequence is called regular, if b ...
- CF524F And Yet Another Bracket Sequence 题解
题目链接 算法:后缀数组+ST表+贪心 各路题解都没怎么看懂,只会常数巨大的后缀数组+ST表,最大点用时 \(4s\), 刚好可以过... 确定合法序列长度 首先一个括号序列是合法的必须满足以 ...
- 3 D. Least Cost Bracket Sequence
题目大意: 这是一个规则的字符括号序列.一个括号序列是规则的,那么在序列里面插入‘+’ 和 ‘1’ 会得到一个正确的数学表达式. 合法:(())(), (),(()(())) 不合法:)(,((),( ...
- codeforces 3D . Least Cost Bracket Sequence 贪心
题目链接 给一个字符串, 由( ) 以及? 组成, 将?换成( 或者 ) 组成合法的括号序列, 每一个?换成( 或者 ) 的代价都不相同, 问你最小代价是多少, 如果不能满足输出-1. 弄一个变量nu ...
- 【Codeforces 3D】Least Cost Bracket Sequence
Codeforces 3 D 题意:有一个括号序列,其中一些位置是问号,把第\(i\)个问号改成(需要\(a_i\)的代价,把它改成)需要\(b_i\)的代价. 问使得这个括号序列成立所需要的最小代价 ...
随机推荐
- Python学习之输入输出入门 A+B篇
描述 求两个整数之和. 输入 输入数据只包括两个整数A和B. 输出 两个整数的和. 样例输入 1 2 样例输出 3 a=input().split() print(int(a[0])+int(a[1 ...
- Nginx跨域及Https配置
一.跨域 1. 什么是跨域? 跨域:指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制(指一个域下的文档或脚本试图去请求另一个域下的资源,这 ...
- 快速幂解法--x^n
class Solution{ public: double myPow(double x,int n){ if(==x || n==) return ; if(n == ) return x; if ...
- python数据类型转换&&格式化输出
①python的数据类型包含:数字.字符串.列表.元组.字典.集合这六种基本数据类型.不同数据类型的数据可以进行类型的转换. 使用input让用户输入的数据默认为字符串类型: name = input ...
- python数据预处理
缺失值处理 import pandas as pda import numpy as npy import matplotlib.pylab as pyl # data=pda.read_excel( ...
- Openshift 4.4 静态 IP 离线安装系列:初始安装
上篇文章准备了离线安装 OCP 所需要的离线资源,包括安装镜像.所有样例 Image Stream 和 OperatorHub 中的所有 RedHat Operators.本文就开始正式安装 OCP( ...
- 用字典优化过长的if 语句
如果代码中,if 语句,后面elif 过多,完全可以用字典来优化代码. def response(method): if method == "POST": return &quo ...
- numpy中的max和maximum
numpy科学计算包中有两个函数np.max()和np.maximum(),他们的功能截然不同.简单而言即前者作用于ndarray对象,求的是它自身的最大.而后者是一个数学上的取$\max$的效果,它 ...
- 机器学习中的标准化方法(Normalization Methods)
希望这篇随笔能够从一个实用化的角度对ML中的标准化方法进行一个描述.即便是了解了标准化方法的意义,最终的最终还是要:拿来主义,能够在实践中使用. 动机:标准化的意义是什么? 我们为什么要标准化?想象我 ...
- python批量发邮件
如果有一天,老板过来给你一个很大的邮箱列表,要你给每个人发邮件,你该如何去做,最简单的就是写一个 python 程序 # coding:utf-8import smtplibfrom email.mi ...