dp 专场 *2。
CF1608F MEX Counting#
题意:给出 ,求出有多少个长度为 的序列 满足 且 。
很简单的 dp,个人认为难度下位紫或更低(?)
考虑枚举 ,依次填写 ,并维护当前的 结果,不妨设为 。当前填的数有三种:
直接 dp,设 表示填完前 个数,并且 结果为 ,其中还有 种 数 。
考虑 的影响,如果 还是 ,那么 或 ,转移:
如果 的数字种类数不变:
如果 多了一个数字种类:
注意我们不计算这 种数的取值 贡献,而是他们之间的相对大小顺序 。
接下来如果 ,不妨设为 ,那么中间 这一段一定都在前 个数出现过,我们不妨直接拿其中 中的一些填入这 个数中。由于我们已经考虑了相对大小顺序,直接拿最小的那几个填入即可。
总转移式
个数为 ,前缀和优化即可做到 。
实现时注意细节问题。 记录
CF1450G#
题意:一个小写字母组成的字符串 ,其中字母 't', 'r', 'y', 'g', 'u', 'b' 不会出现,还给定了一个有理数 。
每次可以选择 中的一种字母,将 中所有的这种字母变成另一种字母,但有个条件:设这个字母出现了 次,需要覆盖这 个位置的最小区间为 ,那么需要满足 。
对于所有 中出现的字母,求出是否可以通过若干次操作使得 中全是这种字母。
因为有 种字母不会出现,所以一共只有 种,可以考虑状压。
我们把字母分类,一类是一开始就不合法的,另一类是一开始合法的。
一开始已经合法的两种字母显然不需要合并,因此我们一开始需要将一种合法的字母合并到一种不合法的,然后产生一个新的状态。
如果还不合法则继续合并,直到这个字母合法,此时这是一个字母集合(合并的集合),然后把他作为一个新的合法“字母”继续合并。
设 表示是否可以把 中的字母合并起来,并且合并出去。
时间 ,需要优化。
注意到如果两个集合 对应的覆盖区间有交,且 都是合法的,那么 一定是合法的。
观察这能给我们什么思考,我们在第一种转移中枚举 ,如果 和 对应的覆盖区间有交且 ,那么一定得到 。
进一步的,钦定 和 都是由若干个合法的集合合并到一个不合法的字母形成的,设这两个字母为 ,设 ,其实我们可以先把 与 合并,再转为 。由于 都合法,如果去掉 后 对应区间仍然有交,则 ;如果无交,通过第一种转移也可以使得 。
对于 由多个集合合并起来的,可知每个集合都合法。拆分每个集合,如果可以找到一条分界线来分划这些集合对应区间显然合法;如果找不到,依次合并起来就好。
因此,第一种转移时,我们枚举的 额外保证 对应区间无交,即可优化。设 为字母种类数,时间 。 记录
CF1621G Weighted Increasing Subsequences#
题意:给出 ,对于每个上升子序列 ,子序列中 有贡献当且仅当存在 满足 且 ,求所有上升子序列的贡献和,模 。
考虑把 转化为一个排列 ,相同的数则前面比后面大。不妨考虑 , 的上升子序列仍然对应 的上升子序列。对于一个上升子序列,设结尾位置为 ,那么子序列中的一个位置 有贡献的条件是一个位置 满足 且 。
我们只需要用总方案数减去不合法的即可,不合法的条件是不存在 满足 且 ,相当于 是 的最大值。
我们对于每个位置 考虑其贡献,设 的最大值位置为 ,我们要算的就是包含 且以 结尾的上升子序列个数,为 以 结尾的上升子序列个数 以 开头以 结尾的上升子序列个数。前半部分好做,注意 是由 更新的,不更新时直接维护,更新时只需要清空树状数组,时间 。记录
CF582D Number of Binominal Coefficients#
题意:给出质数 和整数 ,求有多少对 满足 且 ,答案模 。
Kummer 定理: 中质数 的次数为 在 进制下进位次数。
感性证明:考虑对初始为 的数连续做 次 ,在 进制下会进位 次,这相当于 中 的次数。而 ,相当于连续 次 的贡献,然后去掉 和 各自进位的贡献。
转 进制就可以直接数位 dp 了。
细节有点多,记录 。
CF1103D Professional layer#
题意:给出 ,一次性修改 个数( 自己定),对于每个修改的数 ,选择 的一个约数 修改为 ,使得最终 ,求最小的 。
先求出 ,设为 , 中质因子最多 个,设实际个数为 。
我们只关心 中 中的质因子,求出每个质因子的次数。不难发现每个质因子次数都相同的两个数除了 是等价的,考虑分为若干个等价类,求出每个等价类的前 小的 分别是多少。
搜一下,等价类差不多一万多一些,比较少。
然后直接状压 dp,设 表示前 个等价类处理的质因子集合为 ,修改了 个数,最小代价是多少,直接转移即可,时间 。记录
CF1784E Infinite Game#
题意:一个由 a 和 b 构成的字符串 ,长度为 。两个人 Alice 和 Bob 在玩游戏,第 场中如果 为 a 则 Alice 赢,否则 Bob 赢。两人遵循三局两胜原则:每当一个人胜场满两场时,称那个人赢了一轮,然后清空胜场记录开始新的一轮。设 为前 轮中 Alice 赢的轮数,当 时若 则 Alice 是赢家,若 则两人平局,若 则 Bob 是赢家。现在 中挖了一些空,求所有可能的 中 Alice 赢、两人平局、Bob 赢的方案数分别是多少,模 。
确定 后,设有 个点 ,每个点表示当前轮结束后的位置,每个点向下一轮结束的点连有向边,不难发现这些点形成基环树,所以游戏一直无限进行下去时,一定是一直在环上绕。
Alice 赢的条件是环上 Alice 赢的轮数比 Bob 多,Bob 赢的条件是 Bob 赢的轮数比 Alice 多,平局的条件是一样多。
每次经过 时可能不是完整一轮,有 种状态(每人可能得 分)。考虑每个状态扫过一个 后的得到的状态,这些状态形成基环树,找到这个环即可。
现在需要知道谁赢,可以考虑记下环上的状态的 Alice 赢的轮数 - Bob 赢的轮数总和,计入状态,但问题是我们根本不知道哪些状态在环上。可以一开始先暴力枚举是哪些状态,然后 dp,最后计算时判断一下。
时间复杂度 ,常数为 ,可过。
记录
CF1842H Tenzing and Random Real Numbers#
题意:有 个变量 ,在 中随机取值。有 条限制,每条形如 或者 ,求满足所有限制的概率。
考虑 转化为 ,这样相当于对一对变量的平均值限制为 或 。
考虑一开始有一条 的分隔线,我们按照与 差的绝对值从小到大加入变量,每次可以加在最上面或者最下面。
设 表示加入的变量集合为 的合法概率。加入 在上面时,不难发现 与 中每一个变量的平均值都 ,判断一下即可。
然后每个变量在上面和在下面概率为 ,这些变量与 的差的绝对值的每一种可能的大小顺序概率为 ,乘上就行, 。
记录
CF1874E Jellyfish and Hack#
题意:一个排列 ,定义 : 我们把 以 为根据分成 和 且相对顺序不变的两个序列 ,然后 。
求出多少种长度为 且 的排列 ,模 。
过大没有用。容斥,改为求 。
一个显然的 DP:设 表示有多少个长度 的排列,且其 值为 。
卷积,设 。
那么
接下来很妙的一步,考虑带入 ,拉插插出多项式 。
可知次数为 ,带入 个不同的 ,为 。
然后我们可以把卷积改成点乘,dp 是 的。
然后拉插插出多项式,有 个点值。对于第 个,分母是容易算的,分子是 ,上面部分预处理,下面直接暴力除。
时间复杂度 。
记录
CF1804H Code Lock#
题意:有一串密码,长度为 ,由前 个小写字母组成。有一个密码盘,输入密码时,每秒可以
输入一个小写字母
将箭头往左移一格
将箭头往右移一格
请设计这个密码盘(包括初始箭头指向),使得输入密码的秒数最小,求出这个数,以及有多少种设计方案。
首先对于密码串,我们可以只保留 表示字母 出现相邻的次数。这样,密码盘的代价就是 ,其中 是两个字母之间的最小移动次数。
关键问题是他是一个环,两个字母之间有两种移动方式,我们难以判断是顺时针移动还是逆时针移动。
设 表示字母 的位置,那么 之间的距离就是 。
我们很容易想到需要把式子拆掉,然后两个字母分开贡献。但是仍然无法处理 和绝对值的问题。
先考虑 为偶数的情况。仔细思考,两种移动方式的距离的分割线是 ,考虑折半的方法,我们可以在 中间砍一刀,然后左边和右边同时从前往后填字母。这样一来,不难发现,填写字母时,我们很容易知道他对于哪些段的贡献是怎样的。
如上图, 是已经填写的字母集合,而 未填写。当我们给 最前面的位置( 的后一个位置)填写一个字母 时,不难发现对于 和 中字母, 与他们的移动距离就是位置相减,其中 的贡献应是减去,系数为 。同理,对于 贡献应是加上。
为了知道 中分别是哪些字母,我们需要提前枚举左边和右边的字母集合。
转移考虑枚举 后分别填写字母 ,然后计算各自的贡献。
这样的转移是 的。由于 之间两条路径长度是一样的,考虑让 归为 ,让 归为 来计算。为了避免需要额外计算 之间的贡献,我们转移可以考虑拆开枚举:先枚举 来从前面转移过来,再枚举 把当前转移到后面,这样可以做到 转移。
最后考虑 为奇数的情况。我们让左边部分后面多一个字母,容易处理,可以发现正确性也是对的。
时间卡一卡就能过了。
记录
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】