Solution Set -「LOCAL」冲刺省选 Round I
状态还行叭。
A 题又犯坏习惯,走起来就大力分讨,上了个厕所之后冷静一下开始寻找比较普适性的 DP 状态,然后几乎就切掉了,可惜复杂度写假了没发现(已经预处理过的前缀和一个一个加,笑死)。
B 题的解法暗示性很强,随便猜一个结点出来套路性 DFS 树就好,比较迅速。
C 题骗的时候就走得有点偏,问题没有抽象清楚,虽然有暴力分,但和正解毫不相关。这个正解确实太神奇了。
Sequence
给定 , 的值域是 。定义值域也是 的序列 是好的,当且仅当它存在一个长度为 的子序列不含重复元素。求在所有的 中, 作为连续子序列的出现次数。
,。
首先,光是 就能让 合法的情况直接判了。
出现次数,还允许重复, 也不大,所以先直接枚举出现位置。设现在 左边还能加 个元素,右边还能加 个元素。注意到若 包含重复元素,左边和右边出现合法段(使 合法的段)的情况是互不影响的,不可能存在跨过 的合法段。稍微抽象一下可以得到这样一个 DP 问题:
给定一个确定的,长度为 的子序列 ,在其后面添加 个元素,使得 合法,我们记这样的添加方案数为 ,特别地,。转移显然有
可以 得到。两边方案数小小容斥一发就能求到 包含重复元素时的方案。
不包含重复元素,注意到此时 ,所以可以大力钦定几个位置让它出现重复,规约到前一种情况。具体地,设在 前面添加了第 个元素时,这个元素与它后面的第 个重复,且前 个元素都没有产生重复。枚举此处的 ,在这种情况下,令 表示添加得到的序列,那么其最长不重复前缀长度为 ,最长不重复后缀长度为 ,结合已经枚举的 ,此处方案数为
注意 个不产生重复的元素还会产生 的系数,记得乘上。
现在算法复杂度是 ,优化很显然:上式对 求和的部分可以滚前缀和。因此最终复杂度为 。
Graph
给定含有 个结点 条边的强连通有向图,若 到任意结点 都有且仅有一条简单路径,则称 是好的。求出所有好的结点 。
多测,,,保证每个图中至少有 的好点。
判 好不好:DFS 一遍,每个访问到的已被遍历过的结点都必须在当前的递归栈内。
从 的条件入手,不要白不要嘛,随便猜几次得到一个好点 。这个“好”字对 的限制非常强,分析一下可知: 为根的 DFS 树唯一,且仅存在外向树边和返祖边。
以此为基础,判断其他结点的好不好。对于 ,如果 子树内包括两条及以上到 严格祖先的返祖边,显然 不好;否则 子树内必然存在恰好一条到 严格祖先的返祖边(图强连通),如果这个祖先好, 就好,否则 就不好。画画图比较明显。
DFS 一遍求出最浅返祖边和次浅返祖边,再 DFS 一遍判断即可。复杂度 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现