task11
[TOC]
1. CF1329E - Dreamoon Loves AA [E]
题面
给定 AB 串 A,另外有 A
你需要选择恰好 B 变为 A,使得更改完之后相邻两个 A 之间的距离的极差最小,求最小极差
题解
Sol
考虑对一个
令
问题是有可能出现
每个这样的限制可以重述为
复杂度
2. ARC159E - Difference Sum Query [K]
题面
给定
定义
- 初始
- 令
- 若
,则令 ,若 ,结束过程,若 ,则令
题解
Sol
考虑这棵树的中序遍历为
对两个端点分别在树上搜索,剩下的事情是容易计算的,复杂度
3. CF1924E - Paper Cutting Again [E]
题面
给定
问期望多少次操作后纸的面积
题解
Flamire 做法
Sol
将随机过程视作:每次随机从所有的
考虑一条竖线产生贡献的概率(横线同理),我们可以将这个过程看作方格纸右下角的移动,其就是竖线右侧每个使面积
定义
注意到
复杂度
题解做法
Sol
将随机过程视作:随机一个
我们把最后一次操作扔掉,对每条直线算切完之后仍然
对于一条竖线
4. CF1975G - Zimpha Fan Club [E] ⭐
题面
给定两个含有小写字母,*,- 的字符串
一个 - 可以和任意字符匹配,一个 * 可以和任意零个或多个字符匹配,问两个串是否能匹配
题解
Sol
只有 - 的字符串匹配是经典 fft,因此我们可以先排除字符串算法(
考虑 * 产生的影响,首先判掉没有 * 的前缀和后缀,它们必须对位匹配
如果前缀的第一个 * 在 * 在
那么两个 * 都必须在一侧,假设在 *,不难发现这两个串也一定能匹配
因此只用考虑 * 的情况,那么 * 拆成若干连续段,我们要判断这些连续段是否能依次匹配到
一种显然的想法是首先找到第一个段的首次出现位置,然后找到第二个段在后面首次出现位置,一直找下去,但是如果每次对整个串做判断复杂度会很高
因此我们每次匹配一个段
5. CF1975H - 378QAQ and Core [E]
题面
给定长为
题解
Sol
这不是我们集训队互测吗。
不会证明。懒得证明。
考虑最大的若干字符,最后的最大后缀一定是这些字符代表的后缀之一,如 aaaaabbbbcccccccddddd,那么我们首先可以将一个 d 放在最后,去除它的影响
至于为什么这么做是对的:如果最后一个字符不是 d,我们把最后一个 d 后面的所有东西扔到某一个 d 前面,一定会让最后一个 d,以及前面的 d 的字典序都变小
接下来剩下的 d 需要都与 a 结合,那么我们就有了 4 个 da
继续结合,a 不够用了,我们产出 1 个 daa 和 3 个 dab
此时 daa 不可能是最大的后缀了,因此我们只用继续给 dab 加字符,得到 1 个 dabb 和 2 个 dabc
继续加完 c,得到 2 个 dabccc,列出此时的所有字符串:c,d-,daa,dabb,dabccc,dabccc
我们发现,每一轮对于每个最大值,直接在末尾添加当前最小的字符串就是对的
即使范围有重叠也是对的,很神奇吧。
按照这个写一下,用哈希比较字符串,就可以得到一个
6. THUPC2024 Final A - 古明地枣的袜子 [K] ✔️
题面
有数组
题解
Sol
看起来不好 polylog,考虑根号。
对
但是属于一个块的操作依然有可能有很多,我们对操作进行一些扰动,使得每个位置恰好被操作一次,这会导致我们有些下标的值不应该被计入答案,不过这是容易处理的
那么现在我们大小为
直接用线段树之类的需要带一个 log,考虑如何不带 log
我们对
总复杂度
7. CF1119H - Triple [E]
题面
给定
每组中选择
对每个
题解
Flamire 做法
Sol
先异或
我们要求的就是
注意到只有
那么我们考虑将
- 设
表示与 交的大小奇偶性为 ,与 交的大小奇偶性为 ,那么原来三项式进行 fwt 变换等价于对初始全 的数组进行如下操作: - 将所有数乘上
- 将所有与
交为奇数的乘上 - 将所有与
交为奇数的乘上 - 将所有与
交为奇数的乘上
这道题的
题解做法
Sol
最后的每一个位置是若干
考虑设这四项的系数分别为
首先,有
我们将所有幂级数只有
通过
通过
解一下方程即可求出每一项
复杂度
8. CF1750G - Doping [E]
题面
给定长为
的字典序小于 - 恰好有
个 满足
对给定正整数
题解
Sol
首先考虑得到一个
如果没有字典序限制的话一种很显然的想法就是钦定,那么我们现在枚举 lcp
设 lcp 为
直接计算不好算,因此我们不直接钦定位置,而是钦定一些值域段,然后将它们排进去,进行一些分类讨论可以得到一个对每个
现在的复杂度瓶颈在于我们需要对每个
注意到我们在
复杂度
9. CF1129E - Legendary Tree [E]
题面
交互题。
有一棵隐藏的
题解
Sol
我们可以询问
正着直接做需要乱七八糟的点分治。
考虑倒着扫,那么当前后面的结构会形成若干棵子树,设这些子树的根组成的数组为
10. JOISC2017 - 开荒者 [K] ✔️
题面
一个
每年夏天,你可以选择一个方向,让所有草向这个方向扩散一格(之前的草仍被保留)
求最少多少年能让网格填满草
题解
Sol
注意到操作的顺序无关,最后每个草都会被扩展成一个矩形,设上下左右操作次数分别为
注意到如果
我们期望让这个东西和值域无关,因此我们需要进行一些分析
考虑对于一组合法解,我们不断缩小
也就是说总共只有
此时一种可行的写法是枚举
但是其实可以不带 log。
对于固定的
我们按顺序扫这些行,做三个滑动窗口,就可以得到把
但是还有未解决的问题:
- 对于一行,计算最大的相邻差直接
会导致复杂度变为 ,注意到影响到一行的草一定是按 排序后的一个区间,因此我们只用预处理 个区间,容易做到 - 我们进行扫描线需要将操作排序,这个如果我们一开始将所有草按
排序,就是两个有序序列的归并,因此也不需要带 log
那么我们就得到了一个
至于为什么选出一个
找到
我们将草整体平移,将
11. JOISC2017 - 港口设施 [S]
题面
有
给出每个物品被压入和弹出的时刻,保证为
求有多少种选择每个物品压入哪个栈的方案,使得入栈出栈顺序合法,对
题解
Sol
相当于我们在所有相交不包含的区间之间连边,判断是否有奇环,并且求连通块个数
相交不包含,这个我们可以用一个类似栈的结构去刻画,那么我们每次对于一个区间的 merge 就是把一段区间内的点全 merge 起来,这个可以用并查集维护
复杂度
12. JOISC2017 - 烟花棒 [E]
题面
有
初始第
求想让所有人的烟花都被点燃过,
题解
Sol
首先,可以二分,那么变成判定性问题。
一个显然的事情就是两边的人一定向中间运动。
进一步,我们可以发现一个人到达
可以说明,如果两个人相遇,将烟花点燃后分开一定不优,因为
那么现在问题就转化为,
计算出来所有收益,从
那么我们每次求出左边和右边的段,每次判断是否能吃掉一个段,能吃就吃掉,否则无解
最后的结果就是两边继续吃下去收益都是负的
这种情况下我们从最后的情况出发,从两边向内走,那么此时就和吃人一样了,也就是说我们把刚才的事情倒过来做一遍就可以了
复杂度
13. JOISC2017 - 门票安排 [E] ⭐
题面
环上有
这
题解
Sol
环上不好考虑,从
我们先假设所有人选的都是区间,那么改成区间的补会让内部
那么这个问题瞬间就好做了:我们假设一共用了
反过来,相当于我们固定一个最大值
这个非常贪心,我们从左到右扫,如果当前位置
那么对于所有最大值把答案
注意到对于
至于为什么是凸的。我不会证。但是大致的直觉是:
14. JOISC2017 - 火车旅行 [S]
题面
数轴上有
假设你当前在
题解
Flamire 做法
Sol
考虑最值分治:找到当前区间内最大的
题解做法
Sol
考虑倍增:容易发现起点和终点只要都到达中间的最大值即可
那么我们倍增维护出起点和终点分别跳
复杂度
15. CF1909I - Short Permutation Problem [K]
题面
给定
题解
Sol
经典套路,转化成逐个加数,按
令
我们转化成
16. CF1909H - Parallel Swaps Sort [E]
题面
给定
- 选定区间长度为偶数的区间
,交换
你最多进行
题解
Flamire 做法
Sol
经过若干次手模,可以发现每次好像换最前面的一段都满足
我们规范一下这个过程,维护一个前缀
1 | 16 3 4 11 12 6 5 15 10 8 14 13 1 2 9 7 |
用平衡树维护每个数到达有序位置的时间
复杂度
zak 做法
Sol
考虑反转排列的操作:这个是容易构造的,不断操作
反转排列的操作中,每对数恰好相邻了一次,那么我们在这时交换两个数,它们最后到的位置也会交换,相当于我们以某种顺序给定了这
而我们是可以交换出任意排列的,如果两个相邻数属于同一个置换环就交换,最后任意两个都不属于同一个置换环,因此可以得到
那么我们就得到了一个
应该观察一下矩阵的性质啥的??我不知道啊。总之似乎是可以维护的
17. CF1965F - Conference [K] ⭐
题面
有
你需要选择
对
题解
Sol
首先,这个问题可以 two-pointers,那么我们需要解决的问题就是如何判断一个区间是否合法
这是一个区间图匹配问题,贪心方法显然不好扩展,因此考虑 Hall 定理
由于天数是完美匹配,所以我们可以考虑以人为
考虑观察一些性质:对于两个人
注意到这样调整之后所有人的
但是所有区间还不是很好判,继续观察性质:我们对右端点
考虑
那么相当于我们只用判整个区间是否合法,two-pointers
18. CF1930G - Prefix Max Set Counting [E] ⭐
题面
给定一棵根为
求所有 dfs 序能生成的编号前缀最大值集合的数量,对
题解
Sol
考虑一个点的所有儿子,不妨将其按子树最大值
注意到如果我们先访问了
再进行一些观察:如果访问子树
现在访问顺序固定了,那么我们可以进行一个过程,不断计算出到一个点
在进入一个节点
注意到全部赋
复杂度
19. CF1817F - Entangled Substrings [E]
题面
给定一个字符串
题解
Sol
题解有厉害基本子串结构,但是我不会。
不过这是纯纯的唐氏题。
考虑用熟悉的事情改写
endpos 差分可以用哈希判,因此我们只用考虑一个等价类内的 sam 节点。
对于一个
那么我们如果固定
也就是说,对于第一次出现在
复杂度
20. CF1738H - Palindrome Addict [E]
题面
你有一个字符串
push c,在末尾接上一个字符 pop,删除的第一个字符
每次操作后求
题解
Flamire 做法
Sol
建 PAM,注意到每次 push 和 pop 分别会让一些回文串的出现次数 +1/-1,并且操作的范围都是某个节点的到根链
这个节点可以用倍增求出,用 ds 维护可以做到
题解做法
Sol
考虑发现一些性质:每次加入一个字符或删除一个字符,最多导致本质回文子串个数变化 1,因此可以考虑一些均摊复杂度的做法
加入一个字符的时候判断是否出现新的回文子串是容易的,只要检查一下右端点指针指向的节点是否出现过即可
那么我们只需要找到需要被删除的节点,就可以在此基础上解决这个问题
直接找到比较困难,因此我们考虑维护所有已经出现的串的最右出现位置
但是暴力更新复杂度是错的,因此我们采用懒标记的方式:当一个点被删除时,将节点上的
注意到有可能出现儿子的
复杂度
21. AT_dwacon5th_prelims_e Cyclic GCDs [E]
题面
给定长为
定义
题解
Sol
注意到可以有一个 dp 解法算所有的
也就是说
打表发现答案看起来像是各种东西乘出来的,大胆猜测一下答案是
事实上,我们可以证明这件事情:设
不妨设
不妨假设某质数
最后可以规约到
一种直观的理解方式是
22. CF1394E - Boboniu and Banknote Collection [E] ✔️
题面
给定一个长为
题解
Sol
以下均认为回文串指的是偶回文串
对于
如果我们一次操作内折掉了一个不是最小的回文前缀/后缀,不难发现这是不优的,因为我们折最小的前后缀可以用更多次操作完成同样的事情,那么这限制我们,每次折的回文串都不能有更短的回文前后缀
如果两个回文串互相覆盖对方的中心,那么一定能产生一个
定义所有不包含
定义
- 有两个折点,可以直接规约到
的问题,满足条件 - 没有折点,那么最后操作完的串一定包含
,因此一定可以再接着折,增加操作次数 - 有一个折点,不妨设是折成 →→← 的样子,那么如果下一段是 ←,我们可以将 →← 段删除,得到一个折点数不变的
的方案,如果下一段是 →,我们可以将 →← 段删除,得到一个折点数 的 的方案
那么也就是说,对于任意一个本原
由于本原
那么如果我们能建出 pam,这件事情就是可以办到的。但是最后得到的是一棵字典树,pam 的均摊复杂度不对,这件事情我们稍后处理。
接下来考虑合并回文前缀/后缀的情况。
注意到现在我们的字符串没有本原
分析一下,这两个过程大致不会相交,因为我们取出左边最后一个回文串,讨论一下右边第一次跨过来的位置,会发现一定导致两个回文串互相覆盖中心,也就产生了
唯一相交的情况就是两个过程缩了同一个回文串的两半,比如 1 1 2 3 3 2 1 1 2,这种情况下特判一下就好
对于折后缀,我们在字典树上直接向上指,递推即可
对于折前缀,我们可以维护一个栈,每次新加一个节点的时候判断一下到栈内上一个节点的位置是否是一个回文串,是的话就折掉,回溯的时候只要把范围超掉的弹了就好
那么如果我们能建出 pam,这件事情就是可以办到的。
接下来考虑分析建 pam。
存在不均摊建 pam 的方法,但是我做的时候不会。
考虑观察一下这题的性质:本原
事实上,我们可以证明,一个回文串的最长回文后缀一定
那么 pam 的深度是
23. CF1098F - Ж-function [K]
题面
给定长为
题解
Sol
建 sa,去除一些容易统计的贡献,问题可以转变为我们需要对所有
用 dsu on tree 难以维护,注意到
分三种情况讨论:
在分治中心不同的子树,此时 为分治中心 在分治中心子树外, 在分治中心内,此时 与 绑定 在分治中心子树外, 在分治中心内,此时 与 绑定
每种情况可以变成二维数点或一维数点问题,可以用树状数组解决,复杂度
24. AGC067B - Modifications [K] ✔️
题面
有初始全
求可能生成的
题解
Sol
先考虑如何判断一个
那么考虑对这个进行 dp,令
如果一个区间不能变为全任意,那么我们找到所有能变为全任意的极大区间,需要保证的就是这些区间无法继续扩展
注意到区间无法继续扩展等价于任意一个询问区间要么全任意,要么只包含一种不任意的数,那么我们令
转移即可,复杂度
25. AGC067D - Unique Matching [E] ✔️
题面
给定
题解
Sol
不妨假设最后确定出来是
如果我们将
考虑处理出度为
设
- 长为
,固定 不被覆盖,其余随意的方案数 - 长为
,固定 不被覆盖,其余全被覆盖的方案数
转移式是
经过一些分析可以得到
考虑容斥,总方案数是
- 长为
,固定 和 不被覆盖,其余随意的方案数
转移式
经过同样的分析可以得到
那么直接写出来就是
26. NOI2023 - 合并书本 [K] ✔️
题面
有
你每次可以选择两本书
求将所有书合并到一起的最小总代价
题解
Sol
搜索。完全不会啊。
注意到最后会搜出一棵合并树,每个非叶子节点表示合并两本书,并且又右儿子贡献
如果我们能只关心叶子的
考虑从上到下搜索决策树,每次将决策树的一些叶子分裂成两个叶子,但是这样还是无法计算
于是有人说,考虑最后的合并树,设子树高度为
注意到我们可以直接等效成一次分裂一个子集的叶子,因为我们做的事情是所有非叶子节点子树高度
注意到这个子集一定是
题解说这样直接写出来可以获得 75pts。
再加一个优化:对一个状态记录
加上这个优化后总状态数只有
27. UNR8 - 里外一致 [K] ⭐
题面
给定长为
题解
Sol
火大了。
注意到对于一个
也就是
注意到模数是
现在如果直接枚举取了多少项
注意到
此时外面倒着 dp,
算出每种出现次数有多少数可以使用莫队或扫描线,复杂度
28. UNR8 - 二维抄袭检测 [E] ✔️
题面
给定一个字符串
- 从
开始向下或向右走能走出来的与 匹配的最长路径的长度
题解
Sol
路径的形态不好考虑,因此我们先考虑一些愚蠢的策略,比如一直向右走,这是两个后缀的 lcp
走不动之后我们需要向下转,设我们走到了
那么我们现在需要解决的是,对于一个串
这个可以用二进制压位,然后在猫树上维护信息,在猫树上维护中点斜线上每个格子向左向右,能走到斜线上的哪些格子,复杂度
如果使用 SA 求 lcp,总复杂度为
29. UNR8 - 难度查找 [K] ⭐
题面
交互题。
有一个
题解
Sol
啊啊啊。
直接做不好做,考虑提取偶数列,我们在偶数列中求第 priority_queue,不断添加每一行最右边的数,实现这个事情
偶数行列交替取,目前我们的询问次数是
加记忆化以及一个剪枝:如果 priority_queue
可以说明,这样剪完之后询问次数最多为
具体地,考虑
注意到如果我们每次添加都是行的最后一个元素,那么设在处理完
不妨先假设操作次数是
注意到对于一个
因此最后一定减了
那么总共询问次数最多为
30. UNR8 - 大海的深度 [K] ✔️
题面
给定
题解
Sol
asdkchksafdlkajfklasdfljghkjadfdf
考虑单次答案怎么求:有两种方式,分治或者笛卡尔树,而动态维护笛卡尔树是一个很困难的事情,因此我们考虑分治
那么分治用一个
考虑计算
直接做的话,这是一个单点修改,全局求
单侧递归无用论.jpg
考虑换一换维度:按照
这个使用 segbeats 维护,加上外面的
实现较为复杂。
31. UR25 - 见贤思齐 [E]
题面
有
- 对于所有
,如果 ,那么
题解
Sol
手模。
首先一个环,可以发现最小值一定在不断
那么我们就可以把环断开,转化成树上的问题
接着手模,我们可以发现当
相当于我们对每个节点求
复杂度
32. UR25 - 装配序列 [K] ✨
题面
给定
题解
Sol
太抽象了。
考虑贪心求 LIS,但直接做显然没前途,考虑顺着值扫,维护下标序列,即
出于某种原因,每种数保留的位置在任何时候都是一个前缀,不妨假设
依次考虑它顶掉的下一个数,那么就是顺次执行如下过程:
- 对于每个
,如果 ,那么交换 - 对于每个
,如果 ,那么交换 ,然后 - 最后
直接做是
注意到
这样我们可以在
大于
33. QOJ8938 - Crawling on a Tree [K] ⭐
题面
给定一棵
第
给定
题解
Sol
考虑树形 dp,令
那么注意到
,其中 为 父亲边的 值
那么可以写出一个
注意到对于同一个
进一步可以归纳证明
34. QOJ5095 - 九王唱 [E] ⭐
题面
有
有一个整数
题解
- Title: task11
- Author: Flamire
- Created at : 2024-04-29 00:00:00
- Updated at : 2025-08-22 15:43:58
- Link: https://flamire.github.io/2024/04/29/task11/
- License: This work is licensed under CC BY-NC-SA 4.0.