Logo KSCD_ 的博客

博客

【VP 记录】ABC249

...
KSCD_
2025-12-01 12:56:34
Defection,Retribution,Testify.

本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2024-06-04 19:50:37

记录

ABCD 15min 切掉了,E 题思考了较长时间,中途还换过思路,60min 切掉了,F 题一直在想数据结构,没有想出正解。

VP 后补了 F,G 紫 H 黑决定不补了。

题解

A - Jogging

基本判断 + 数学题,略过不表。

B - Perfect String

开桶 + 记录是否有大小写,略过不表。

C - Just K

状压,枚举每一种选择方案,再统计出现次数恰为 $K$ 的字母个数取最大值,时间复杂度 $O(2^n\times26n))$

D - Index Trio

注意到值域较小,考虑开桶。

之后枚举每个数作为 $A_k$,再枚举 $A_j$ 来确定 $A_i$,乘法原理统计答案。复杂度为 $O(A_i\sum_{k=1}^{A_i}\frac{n}{k})$,调和级数也即 $O(A_i\ln A_i)$

E - RLE

前缀和优化组合计数类 dp。

首先想到设 $f_{i,j}$ 表示长度为 $i$ 的字符串,转化后长度为 $j$ 的方案数,转移时枚举 $k$ 为最后一段的长度,从 $f_{i-k,j-(l_{k}+1)}$ 转移过来,同时要乘上与上一段字母不同的 $25$ 种方案,时间复杂度 $O(n^3)$

考虑优化转移,发现所有位数相同的 $l_k$ 均相等,也即会从第二维相等的一段连续区间转移来。因此维护前缀和数组 $g_{i,j}=\sum_{k=1}^{i}f_{i,j}$,分为不同位数的数统一转移过来即可,时间复杂度优化到 $O(n^2)$

F - Ignore Operations

场上想到了枚举每个修改操作为最后一次修改,再从后面的加操作中选取若干个贡献。

因此考虑倒序处理,若为修改就记录一下答案,接着消耗一次跳过来保证这次不会修改,再继续向前寻找,直到次数耗尽。加操作中,若加的是非负数,加上一定不劣,而若是负数则先放到一个大根堆中,次数用尽时先从堆中拿出最大元素加上,来换取一次跳过,直到堆也空时才是真正耗尽了次数。

其实大根堆维护的类似于反悔操作,也即把已经跳过的再选回去来节省次数。

评论

暂无评论

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。