题解 P7914 【[CSP-S 2021] 括号序列】(区间 dp,前缀和优化)
这是一篇带着牢骚的题解(见末尾),为了纪念我支离破碎的 CSP2021。
括号串题,考场上第一眼看过去以为 *
能在满足 的情况下随便插入,于是设 表示前 个字符、有 个带匹配的 (
、并且末尾有 个连续 *
的合法串数量,随便转移一下就可以了,光速码完后发现过不了第一个样例,然后发现自己太 navie
了。
发现线性 dp 貌似不好实现,改用区间 dp 试试。
设 表示区间 的合法串数量,那么有一下几种情况:
-
和 分别可以是
(
和)
, 可以是*
,那么就由 转移过来。 -
和 分别可以是
(
和)
, 可以是*
,那么就由 转移过来。 -
和 分别可以是
(
和)
, 可以是*
,那么就由 转移过来。(可以在处理上面两种时顺带转移掉) -
由 和 转移过来。
-
可以是
*
,由 和 转移过来。
枚举 和 需要 ,其中第 种的转移需要 ,复杂度是 ,显然过不了。
但仔细发现第 种中 的枚举可以用后缀和优化掉,于是变成了 。
码完后你就会发现第 给样例过不了。
因为第 种和第 种转移有问题,一个例子: ()()()
。此时 和 两种转移实际上重复了。
怎么解决?
令 为形如 ()
、(A)
、(S)
、(AS)
、(SA)
的串,那么这种会重复转移的串就形如:(相邻的 中间有可能有若干 *
,下同),我们可以枚举 ,而剩下的 就是一个普通的合法串,这样的转移就没有重复了。
那么我们就可以额外设 表示区间 形如 的数量(相当于只有第 种转移的 )。
过不了第一个样例的线性 dp 代码:link
100pts 的区间 dp 代码:link
最后谈一下感想吧,我本身属于那种思维能力不强的选手,考场上看到 T1T3 这种一股 cf 味的题肯定是放到后面做的。T1T3 暴力写完后去推了会 T1,发现不是单峰函数之后就直接放弃了,接下来就是漫长的刚 T2 的过程,中间无数次发现题目读错,代码删删写写,但是始终过不了第 个样例,最后人已经是麻木的了,最后 15min 的时候回头去看看 T1,发现机廊增加时新来的飞机停在哪个机廊是没有影响的,一个 set 的做法就立马会了,但是最终还是没打完。
考完后发现自己 T2 没过样例 是因为把一个地方的 s[k]
打成了 k
,这么一个 zz 的错误耗掉了几乎整场考试的时间。
或许我可以说,是考场降智没让我一眼看出 T1 的性质。
或许我可以说,是一个手残让我把 T2 的 100pts 亲手变成了 0pts。
或许我可以说,我运气不好,开题的顺序不对,但凡先去刚 T1T3 都能有 200+
但这已经不重要了,重要的就是我很弱,我 cf 打的少,我不敢面对自己思维能力弱这个事实。
现在已经初三了,说早也不早,说晚也不晚。
以前你我见识自为高过世人,我今日才知自误了。以后还该立志功名,以荣耀显达为是。
__EOF__

本文链接:https://www.cnblogs.com/tiatto/p/15875650.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现