2025.2.13 近期练习
P11052 [IOI 2024] 象形文字序列
做一个题的通用思路,就是考虑问题的若干特例,即找部分分做法,然后做“启发式搜索”找最有思路的。
因为最长公共子序列是 NP-Hard,这里要
考虑
然后后面可以放到平面上
考虑每个元素加起来出现次数
如果该元素不出现在最全公共子序列里,但是其肯定可以作为公共子序列出现,所以这肯定不合法。
所以现在每个剩下的每个元素都必须出现。那么出现
考虑字符集为
平面上
那么相当于每时每刻都在一条线上。那么你走到下一个点是不能穿过必经的行的,这个可以求出到底往哪走。
可以求出是否可以向上走或者向右走。然后你发现如果走到第
考虑更普遍的情况。也是可以用平面刻画的。
你每一步有两种走法,要么在序列
然后区间的性质还是存在的。算了后面不会。
Loj #6440. 万能欧几里得
有一条直线
考虑先把直线画出来,再刻画一条折线。从左往右扫,如果直线交到一条横线就向上,交到一条竖线就向右。
如果直线碰到整点那么先向上再向右。那么每次向右走的点都是要求的点。称向右操作为
也就是第
那么回到正题,我们想要递归地求
若
若
那么第
其中
到任意一道题里面,只要替换
那么
比方说 P5170 就维护
CF1634F Fibonacci Additions
考虑如何刻画。算了,直接把这个题记下来就行了。维护”差分“数组
UOJ #692. 【UR #23】民意调查
考虑枚举给子集分组,要么按中位数分组,要么按平均数。显然是按照中位数是比较合适的。
于是枚举中位数是哪个,以及集合的大小。然后剩下就是一段前缀和一段后缀背包拼起来。
考虑降低空间复杂度,考虑从前往后枚举做退背包即可,就可以省一维。复杂度
P3642 [APIO2016] 烟火表演
我们要研究所有合法方案中边权和最小的。一组合法方案相当于边权的集合。
一个显然以子树为子任务设状态
我们想减少状态维度。维度是相当于给状态分类。
设
你把
放到平面里去刻画。
其中
然后考虑合并两个子树,此时必须要横坐标相同的时候纵坐标相加。
然后既然
考虑如何表示一个凸包。维护拐点,考虑让每经过一个拐点斜率就
对位加直接合并拐点。合并
那你为什么要刻画方案集合的结构?如果方案能写成二维那么就可以用平面直观表示。比方说你可以打表。
P11051 [IOI 2024] 树上代价
如果跟上一题一样的研究合法方案集合然后变成维护凸包,我看不懂因为题解太史。
考虑
考虑
那么设大小为
考虑普遍情况,我们盲猜可以向
考虑从大到小加入点也就是相当于维护连通块。可以处理出每个连通块存在的时间,处理出对应贡献。
P4458 [BJOI2018] 链上二次求和
考虑单点加产生的影响,考虑拆贡献算
那么对于长度
考虑区间加。考虑拆成两段
那么这就变成了差分数组上加等差数列,拿线段树可以维护。考虑差分数组加的等差数列会发生什么。
也就是算形如
但是这玩意有点麻烦,考虑简单点的办法。你可以暴力拆成
例如这个题就可以拆成
其中
而组合数其实是一个关于
那么现在用树状数组维护
P8350 [SDOI/SXOI2022] 进制转换
考虑根号分治。考虑将一个三进制数拆成
如果
考虑
那么我们列加法,设
这里是个卷积。分讨
如果进位就取
这种思想相关 meet in middle,使得贡献可以独立计算,再利用分配率的逆过程。(因式分解)
P11364 [NOIP2024] 树上查询
你考虑将
有一个通用的研究方法就是研究
那么如果
如果是包含,那么大区间所有子区间都为
放到平面上,那么
其中,阶梯的每个相邻的凸点并起来形成了凹点,阶梯左上方代表最大的区间,也是另一个阶梯的凹点。
而阶梯之间的关系就形成了一棵有根树。这棵树是一棵区间的合并树。相当于深度的小根笛卡尔树。
现在考虑原问题。把每个阶梯的左上角的点拿出来,一共有
然后考虑查询,查询是查询一个斜率为
可以看做是两个矩形和一个三角形的并中,查上述点的
那么把斜的旋转一下就变成简单扫描线了,复杂度单
还有个问题就是阶梯型怎么求。也就是你 dsu on tree 的时候当有新的连续段出现的时候就对应一个新的点。
当然这个题还有很套路的做法就是
考虑求出
条件分讨
这个扫描线扫两次,一次扫
P8528 [Ynoi2003] 铃原露露
考虑打表观察。比方说你钦定几个区间必须合法然后观察一下有没有别的性质。相当于研究合法区间集合。
区间合法的条件是所有点形成虚树(无其他点)。那么两合法区间之交肯定合法。
那考虑有交的区间并可以吗,发现大部分合法。反例是比方说两区间各自存在一对
所以区间合法的另一种表达是不存在一个非区间的点其有
还有一个想法是固定左端点然后观察右端点移动时的变化。
考虑结合一下,考虑若
我们考虑研究不合法时函数的形状。比方说
比方说钦定
但是非法矩形太多了。但如果小矩形被大矩形包含就可以删了。所以假设
所以相当于 dsu on tree 的时候,插入一个点就考虑其相邻的位置即可。
所以矩形个数是轻儿子子树大小之和。也就是
这个做法是研究非法函数形状。上一题是研究每种函数取值的形状。
维护 upd 代表被累加进历史和次数,修改时当 Mn=0 才更新 updh,下传的话只有 Mn 跟父亲一样才下传。
然后 h = h + ct * updh 即可。
Loj #6913. 树莓立方体
考虑研究函数的结构,因为最后要求哈希,那么只有研究每种函数取值的形状一条路了。
若函数里取 1,那么代表
考虑放到平面上去处理。对于极长的合法区间
考虑 01 原理,从大到小加入数
我们这里不用管别的序列,因为我们总是最大的最先赋值。
这里跟上面有一些不同。我们要将
因为已经赋值的形状形成阶梯型,考虑维护阶梯左上角的点,均摊
这个题狠狠锻炼我的实现我服了。细节主要在于维护阶梯,还有历史和千万别写错。
qoj # 9222. Price Combo
最优化问题考虑方案集合。一组方案就是元素被划到哪边买的决策集合。不妨放到平面上去表示。
最优化问题基本研究方式是调整。考虑若
放在平面上就是 A 不能在 B 的右下角。也就是说存在一个分界线,左上是 A 右下是 B。
这种问题为什么要放到平面上呢?也就是我们关系他们的大小关系,那么模型是二维偏序。
考虑一个方案的贡献,即 A,B 分别排序然后取第
然后考虑 dp 这个折线,贡献如何计算?考虑折线向右走对应上面一列的选 a,向上走对应右边一行选 b。
这样巧妙地使得加入 A,B 都是分别排序了的。而不是一行一行加入就始终有 a,b 一个没排序。
具体实现对
然后你一个位置有四种状态,对应当前
P5371 [SNOI2019] 纸牌
合法性判定底层是一个构造问题。构造问题考虑调整。
从最小的开始,如果先把
那现在就是一个线性递推,并且状态数是
这种叫自动机判定。
P5279 [ZJOI2019] 麻将
如果你按照
期望的线性性
或者可以看做每个非法
那么按照牌面从小到大加入 dp 就可行了,现在考虑设计判定自动机,这东西跟上面还是比较像的。
判定自动机可以用 dp 的形式来实现,那么就是一个 dp 套 dp 罢了。
CF1605F PalindORme
考虑自动机判定,考虑每次选两个相同的数
重复上述过程直到只剩下
那么若序列存在一种划分 A,B,B 扣掉 A 的二进制位后互不相同,且 A 满足能放在序列两端,那么便非法。
但这个条件很麻烦,其实 A 的条件是可以扣掉的,只需要保证 B 扣掉 A 二进制位互不相同即可。
如果把一个非法解按照 A 分类,我们就有了一个初步的 dp 框架。
设
为啥
还有一个问题就是若
学习到了。我们摒弃对多重集 dp,而是直接对序列 dp,也这样就避免了元素贡献计算以及插入顺序的问题。
而变成序列的话,子集的划分相当于子序列,也就是条件啥的不会变。
即对于一个非法解,其势必存在一个合法的子序列。删掉这个子序列划分子任务就好了。
AGC058D Yet Another ABC String
你考虑刻画性质。考虑差分,那么一个串合法的条件是(除去第一位)的差分数组没有连续两个
那么考虑容斥。现在有一个问题,就是合法是没有
这关系到钦定的问题,显然是前者好算,因为后者还需要处理有没有叠起来的问题。我的理解。
也就是钦定有
考虑算贡献。如果起点在首位那么贡献为
P6846 [CEOI 2019] Amusement Park
考虑一个方案反转了
考虑设
而最外面的点是一个独立集,设为
考虑会算重。每种方案都被一种
复杂度
CF756E Byteland coins
考虑从小到大使用金币,设第
设
考虑计算
而
考虑用前缀和优化背包即可。现在只是面临一个高精的问题,稍微处理即可。复杂度是
CF2066D2 Club of Young Aircraft Builders (hard version)
考虑研究对象如何表示。考虑用每个位置被放满的时间序列
显然
假设我们要让
那么
进一步地,时间轴上每段的长度
事实上,上述转化的条件是充要的,相当于将依时间轴前进变化为依下标前进观察条件。
那么现在设计 dp。考虑设
转移考虑枚举
有一个严重的误区!就是别用“断点转移”,就是别把连续段当成阶段,这样很不好做。
CF2066E Tropical Season
只有判定出来相等是有用的,那么这两个桶都是没毒的。反之若他们理应相等却不等就找到了。
考虑你当前有两个一样的桶
重复上述过程,如果最后排除了
考虑有两种操作,一种是如果有
一种是如果
考虑倍增值域分块
设一个块内的可重集是
考虑块间的贡献,我们只用考虑相邻块。如果一个块内没有值导致后继值在下下个块,那势必
一个块内维护一个 multiset,于是做完了。
uoj #806. 【UR #25】见贤思齐
还是考虑如何描述整个过程。先考虑树怎么做。
设
那么上述式子存在一个问题就是若想知道
考虑
那么
那么设
那么这个过程可以看做是
直到交为空集,也就是存在一个
我们可以用倍增实现这个过程。也就是维护
考虑基环树怎么做。考虑把环上最小的那个点拿出来,这个点肯定一直
其实实现来看上面这步好像没必要。
P7214 [JOISC 2020] 治療計画
考虑刻画问题。如果没有时间维那么就是线段覆盖问题。
考虑在平面上刻画。拿出下标-时间二维平面。我们考虑一个方案就是一个斜边平行
那么,要想要覆盖
那么可以转化为一个最短路问题,考虑建图。
钦定
这个东西是一个二维偏序,按照
观看题解得到:权在点上的最短路有一个性质:每个点最多被松弛一次。所以每个点出队的权值就是其真权。
所以我们可以不用把图建出来,也不需要用主席树,直接在线段树上维护最短路的权值即可。
考虑势能线段树。考虑现在取出队顶的点来松弛,分讨其作为
形如将区间内
如果一个点已经被松弛那么就将其设为 inf。复杂度应该是
注意这里线段树上的点是不用入队的。线段树只是起到了一个维护势能的作用。
AT_cf16_exhibition_final_e Water Distribution
考虑调整。如果
所以我们可以猜想最后有流的边是森林。
考虑如何计算答案。考虑将
考虑一棵树的答案,考虑答案上限,也就是
后面考虑状压 dp,先预处理每个连通块的答案,然后再做子集 dp 就行了。
我想知道这种转化的内涵,如同拆绝对值那样,或者叫增强限制,只是为了好算吗?
CF1874F Jellyfish and OEIS
研究
似乎真的没什么性质草了。考虑若
但是如果条件改成是一个排列,就有区间并和区间交的性质了。并且区间反交也是合法的。
当没有头绪的时候考虑容斥。也就是钦定若干区间为排列。此时我们可以用上区间反交也是合法这个条件。
那么可以带来什么呢?假如我们钦定了两个相交的区间都非法,等价于三个小区间都非法,这两部分抵消。
上面说的相交不含包含关系。所以我们容斥只需要钦定的若干包含或分离区间非法就行了。
那么这就是一棵区间树。假设知道一棵区间树的贡献就是”每个区间扣掉子树区间大小“的阶乘之积。
考虑如何计算答案。考虑区间 dp,设计状态为
转移的话枚举子区间是哪些,同时记
P7670 [JOI2018] Snake Escaping
这个题很典,考虑鸽巢原理,对于一次询问肯定有 0,1,? 中的一种个数
如果 ? 的个数
对于这种问题可以考虑高维前缀和,那么我们已知一个集合里元素之和,相当于已知只含 0? 的串的答案。
对于 1 的个数
对于 0 的情况也同理,求一个高维后缀和即可。那么整个问题复杂度为
CF1322D Reality Show
考虑已知能力值为
考虑算一下贡献,
感觉跟二进制有点像。如果我们从大到小加入数这样会有后效性,不妨从小到大加入数。
那么现在状态就可以用一个二进制数表示,代表处理了
而这个进位显然是
考虑加入一个数
那么有用的状态是
不妨只维护是
CF1844G Tree Weights
一开始我以为
但是这是错的,
考虑定根。那么
考虑递推计算,已知
考虑拆位考虑
考虑计算下一位
这种拆位的思想可以考虑 qoj # 9479. And DNA。最后稍微判一下是否是正整数即可。
CF1616H Keep XOR Low
这个题其实不难。位运算问题考虑用 trie 树处理。然后拆位从高位到低位处理。
考虑若
若
左右子树同时有点的话相当于他们之间匹配还顶着最高位限制。不妨称这是个子任务
考虑解决
若为
也就是子任务
考虑
先考虑其中一个集合左右子树都有。不难发现两个集合都有的那边的子树是没用的,可以任选。
两个集合左右子树都有呢?我们发现两个问题独立。
考虑复杂度问题。这里的集合考虑用 trie 树上的点表示。
每层只有
P11666 [JOI 2025 Final] 邮局 / Post Office
考虑一个问题我们要决策的位置,也就是当有多个包裹在一个点的时候哪个先发。
因为基环树上路径是唯一的,所以同一个点两个包裹的路径也就是谁远谁近的问题。调整可得先发远的更优。
通过调整可知,如果一个包裹要等,那么其在哪个点等是没有区别的,看做是在出发点等。
那么这说明什么呢,如果我们只求一个点是如何决策的,这个点和其他点计算是独立的,包括其之前的点。
而答案就是所有点最后一个离开的时间。那么这就简单了,设
依据我们上面的贪心,那么
考虑维护
考虑环怎么做。其实直接把环拆了然后复制一遍就好了。然后跨越你断的位置的路径拆成两段即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】