「HGDF赛#5」赛后题解

博客围绕CF原题中的多道算法题展开,包括A-Regular Bracket Sequence、B-Discounts等题目。对每道题给出了题目大意,如判断能否组成合法括号序列、去掉特定数后求和等,并给出相应题解,涉及排除法、排序模拟、差分、二分法、搜索等多种算法思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

有一点时间可以写的详细一点了。。。
原题是CF

A-Regular Bracket Sequence

题目大意

给你四个字符串 ( ( (( (( ( ) () () ) ( )( )( ) ) )) )),问能否组成合法的括号序列。

题解

分别按照上面的顺序记为 a , b , c , d a,b,c,d a,b,c,d
首先可以排除 b b b号的所有情况,因为有没有 b b b都是无所谓的。
很明显如果 a a a d d d的数量不一样,那么一定不能组成合法的序列。
但是如果 c c c存在,那么一定要有 a a a d d d来和其匹配,不然就一定不合法。

code

code

B-Discounts

题目大意

给你 n n n个数,去掉第 q i q_i qi大的数后求和。

题解

直接排序模拟即可。

code

code

C-Painting the Fence

题目大意

给你 n n n段区间,问去掉 2 2 2个区间后,能被覆盖到的点的总数最多是多少。

题解

我竟然想了很久。不可思议。
一开始我想了一个非常暴力的 n 2 l o g 2 n n^2log^2n n2log2n的做法,但是算了一下,差不多要 3 e 10 3e10 3e10的复杂度,虽然 C F CF CF的评测姬非常快,但是两秒内应该跑不出来。
这个暴力做法就是暴力建立线段树修改,然后维护 > 0 >0 >0的个数。
但是很明显可以有牛逼的做法,虽然依旧是暴力。
首先差分 O ( n ) O(n) O(n)求出每一个点在不修改的时候能被覆盖多少次。
分析一下,必然是被覆盖 1 1 1次或者是 2 2 2次的可能会对答案产生贡献。
参照差分的思路:先暴力枚举删除某一段区间。
那么如果再删除一个区间,假设为 [ l , r ] [l,r] [l,r]
那么在这个区间内所有的 1 1 1,都会使答案 − 1 -1 1
也就是我们需要统计 [ l , r ] [l,r] [l,r]之间有多少个 1 1 1
暴力维护是 O ( n 3 ) O(n^3) O(n3)
加一个前缀和维护是 O ( n 2 ) O(n^2) O(n2)的复杂度。

code

好像忘记删除调试语句了,算了不管了。
code

D-Stressful Training

题目大意

n n n台电脑,每一台电脑有一个 a i a_i ai的初始电量,和 b i b_i bi的每分钟消耗电量。
现在你有一个充电器,问充电器需要每分钟最少充多少电才能让所有电脑同时工作到 k k k分钟。
充电器每分钟充的电定值

题解

先考虑子问题。
对于每一分钟,都一定是给那个续航能力最少的电脑充电。
我们把消耗电量再充电,变成充电在计算续航时间。
对于每一台电脑 a , b a,b a,b,他的续航时间一定是 ⌊ a b ⌋ \lfloor\frac ab\rfloor ba,下一秒他就要挂掉了。
那么我们就每一次取出当前续航时间最少的,并给他充电。
这样不会有后效性。
那么前面一部分的答案就二分一下就可以了。

code

code

E-Knapsack

题目大意

有一个容量为 w w w的背包,大小为 i i i的物品数量有 c n t i cnt_i cnti个,求最大能装的重量。
n<9

题解

本场考试最水题目没有之一。
n n n这么小,坑定就是搜索或者是状压。
为什么要状压?不需要,到头来和搜索还是一样的。
如果 n n n大一点就是对于空间第二维有限制的背包问题,这样的问题需要三分法求解或者是高级贪心。这里不展开。
但是 n ≤ 8 n\leq 8 n8,这么明显的搜索为什么不写???
那么就枚举每一个物品放几个就是可以了,搜索不需要教了吧QwQ

code

code

F-Clear the String

题目大意

给你一个串 s s s,每次可以花费 1 1 1的代价删去一个子串,要求子串的每一位为同一个字符。
求删去整个串的最小代价。

题解

请见洛谷题解区,被踩在最下面的那一个是我写的。

code

code

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值