正睿省选模拟赛
22省选10连测 Day1
赛时得分:20+30+40
订正得分:100+100+100
rk6
A. 【2022省选十连测 Day 1】01串
算法:dp FFT 容斥
相当于每次删掉一个字符,但是这样会重复。
所以我们对于一段0,我们优先删掉他们的最后一个,对于一段1,我们优先删掉他们的第一个。
这样如果在开头补一个0,末尾补一个1,我们一共有这4中操作
- 删掉开头一个 1
- 删掉末尾一个 0
- 删掉一个 01 变成 0
- 删掉一个 01 变成 1
我们考虑 中什么时候被删掉,不难发现,如果 是 0,那么 应该比 早删掉,这里填上一个 < 号,否则填上一个 > 号
这个问题就变成了 loj575
具体的做法是,我们用 表示以 结尾的答案,对于一段连续的小于号,我们只有唯一的选法,在大于的位置,我们考虑容斥。
不难发现这个东西可以分治 FFT 优化,复杂度变成了
对于 ? 的情况,直接乘上一个组合数就可以了
B. 【2022省选十连测 Day 1】做菜
算法:dp
大毒瘤题
假设我们确定了顾客和 ,那么显然是应该按 从大到小来做
最后的答案肯定是一个 加上所有 比他大的
因此可以按 从小到大排序,用一个 dp 来解决这个东西
这样的话,如果我们知道 ,这个东西同样是可以在 的时间内去求的
考虑到某一时刻如果 ,那么后面 是不会变化的
对于还有可能变化的部分,我们考虑他的差分
不难发现这个差分一直是单增的,即 是凸的
这样每次进行一个关于 的转移的时候相当于是在差分中插入了一项
同时我们发现 ,优先队列中前缀和 的项马上就变成 的了
所以一次操作相当于先不停的删开头元素直到队列被删空或者 被删完,然后再插入一个
做完之后第 个被弹出的就是 的最终答案
在知道 的情况下这个做法可以用一个优先队列维护 解决
考虑对于所有的 的情况
我们用 表示在最小花费 前面的有 个,现在优先队列在 前面的和为 (包含 ),答案为 ,比 大的最小的是
首先我们进行删的操作
这里在 的时候不需要再转移的原因是当 被删掉之后我们就不再关心这种情况的答案了
在后两类的时候还要顺便统计一下答案,后面的可以任选乘上一个 的幂即可
然后我们进行选当前这个
最后再统计一下答案即可
总体复杂度是 ,总之就是能过。。。
C. 【2022省选十连测 Day 1】树上路径
算法:dp 随机化
想到了随机化没想到 就不太懂。。。
的 非常简单, 表示 现在往上延伸多少的时候的最大价值
然后再一个点一次枚举子树,用 表示现在子树中 0 和 1 的个数的差是多少
转移就是 的
对于 ,就是 0 和 2 的个数的差,和 1 的个数的奇偶性
发现我们最后只关心 的 三个位置的值,所以我们把每个点的出边 random_shuffle 一下,每次用到的最大值就不算太多,所以这个时候取上界是 1000左右就差不多了
22省选第一轮集训 day3
赛事得分:58+25+0
订正得分:100+100+100
A. 模式串匹配
算法:dp bitset
我菜
*可以不用管,接下来的问题就是带通配符字符串匹配
考虑dp,用 表示 第 位和 第 位匹配
如果 不是通配符,只能从特定的 转移过来
如果 是通配符,没有转移限制
不难发现可以 bitset 优化
复杂度
B. 追逐
算法:博弈论 dp 长链剖分
不难发现如果 显然能赢,直接输出1
否则需要任意一个连通块的直径都
这样就可以 dp 了,用 表示 子树中离远的点距离为
每次枚举一个新子树转移
不难发现因为第二维和深度有关,所以考虑长链剖分,设 的深度为
继承重链的时候,相当于是区间乘法和区间求和
考虑转移的时候,这个 的转移是非常麻烦的,但是我们注意到,在轻链头的时候直接暴力转移复杂度依然是正确的
所以我们只需要转移最前面 个和后面 个,中间我们可以直接区间乘法
这样的话我们就可以利用线段树维护长链剖分解决了,复杂度为
但是进一步我们可以观察到,对于 和 的部分,,也就是说子树中所有的值全部是合法的
所以中间这部分线段树上乘的一直都是1,所以我们就可以不用管他们了!
所以对于一个连通块维护一个乘法标记,就可以 解决了
具体的做法是,考虑按照 dfs 序作为 数组的下标,这样可以不用值域平移
对于 ,我们维护 表示 的和
那么有
最后乘上一个逆元的原因是 这一位不需要乘上
C. 堆
算法:dp gf
我们每一个叶子分开考虑,对于一个堆的叶子集合 ,对答案的贡献是
所以只需要求 作为叶子时所有堆的 即可
用 表示现在有 个点,编号为 的节点是叶子的方案数, 表示所有大小为 的堆的
考虑一个 的转移,他可以由 在 下面接上一个大小为 的任意的一个堆来得到,堆的值只需要满足比 小即可任意选择,但是此时 不再是叶子,因此乘上 ,得到转移
设 为 (即 的EGF的导数), 为 的 EGF
那么上面这个转移方程可以写成
又
我们想要知道的是
注意到 实际上是 乘上
因此后面那一坨的 系数应该是
拆开下降幂,发现是一个差卷积的形式,直接卷
这样如果知道 求出答案是容易的
下面如何求
注意到 有转移方程
即 有
这是一个微分方程,移项可得
两遍同时积分可得
也就是
带入 可得
写成 的形式上下同时泰勒展开再多项式求逆即可求的
虽然有根号,但是泰勒展开之后恰好是没有根号的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】