10月杂题
P9527 [JOISC2022] 洒水器
很妙的题。
显然要对祖先打标记。
如何打,
但是直接打标记会重复,被修改节点所在的那一条链会被修改多次。一顿分析发现其实就是在
反思:数据范围不仅可以对时间优化有启发,还可以压进空间里。
CF1295F Good Contest
显然要离散化,将
设
P3665 [USACO17OPEN] Switch Grass P
发现最短路径一定是一条边,于是有一种枚举所有出边的做法,会被菊花图卡。
还有一个结论,这条边一定在最小生成树上。
是树就好办了,对每个父亲开一棵线段树,下标为颜色,然后维护每个孩子中的最小距离。
修改只会影响自己和父亲的答案,只会修改父亲的线段树。在叶子处用 multiset 维护该种颜色所有距离,然后往上合并。
反思:对题目挖掘性质不要停留在粗浅的层面,需深度挖掘有利的性质。
P9520 [JOISC2022] 监狱
猜测:无解当且仅当某两条线段互相夹住另一条线段的一个端点,或者一条线段完全包含另一条线段。
但是结论假掉了……(第二个样例)。
判断非法比较困难,考虑如何判断合法。
如果合法,则存在一种先后顺序使得他们可以顺利到达。观察得到可以若合法则存在一种方式使得每个人都不停顿地走到终点,因此我们只需思考先后顺序。
有两条性质:
- 如果
的起点在 的路径上,那么 必须先于 走。 - 如果
的终点在 的路径上,那么 必须先于 走。
于是我们 得到一种
优化就是树剖之后线段树优化建图。
P9017 [USACO23JAN] Lights Off G
显然要预处理。
Keys:初始开关的影响和变换开关的影响可以单独计算,所以我们可以预处理某个状态能否在
操作上界为
反思:将初始和变化后的分开考虑。对于要预处理的题目,肯定得预处理初始状态一样的,这时将他们分开就很重要。
P9018 [USACO23JAN] Moo Route G
这种思维题是我不配做出来的。
首先要观察到,
先从
若
猜测这个可以推广到任意情况,于是就通过了。
反思:对题目的观察还是不够,从简单问题分析拓展到复杂情况的能力欠缺。
P1641 [SCOI2010] 生成字符串
反思:打表技术不够熟练,无限接近正解。
可以转化成从
若
另一种理解方式是用折线图,当接触
P9019 [USACO23JAN] Tractor Paths P
第一问可以倍增轻松求出。
如何做第二问,一直想着枚举关键点,但这样肯定做不了。既然我们都倍增了,那我们枚举什么时候脱离原有路径的步数
反思:思考时应从已知、已求出、前面用过的信息入手。
[ARC180B] Improve Inversions
猜!
猜测答案是长度大于等于
找出所有能换的位置,先换数值小的,再换大的。
怎么换,对于一个
好的我对了。
[ARC180C] Subsequence and Prefix Sum
发现
一旦前缀和出现了
一开始想用最小表示法,但不会 。
发现自己智力不够,思维混乱,我们只需再记录
反思:思维混乱,在计数题中是大忌。要学会归纳各种情况,减少复杂的分类讨论,规约为简单的问题。
P9189 [USACO23OPEN] Custodial Cleanup G
猜测是先把所有钥匙收集,再按一定顺序放置。
第一问可以用搜索解决。
注意到一些结论:与
猜测:把所有满足
好像不对。
看了题解感觉很sb。
发现第二问一种合法的方案,倒过来其实就是以
于是也可以用类似方法解决。
P9192 [USACO23OPEN] Pareidolia P
稍微猜测是子序列自动机上动态 DP。
因为要求所有子串,设
线段树维护矩阵即可。
CF280C Game on Tree
发现树形 DP 是困难的。
设
要求的就是
显然一定要比它的祖先先选,所以概率是
P9131 [USACO23FEB] Problem Setting P
先考虑状压出每道题的状态,状态相同的单独考虑。然后思考转化判定条件:其实就是满足前一道题是后一题的子集。
那我们设
一个 Trick:将状压后的数折半,分成前后两部分。
设
有一个大神 DP:考虑优化枚举子集,考虑每次加入一个元素,按
设
- 下一步走到的集合不选:
- 下一步走到的集合选:
反思:转化判定条件,配合一些 Trick 的使用。
P2467 [SDOI2010] 地精部落
一直想着插入 DP,后面发现好像处理不了边界?
还是考虑从小到大加数。发现答案要么是 M
字形,要么是 W
字形,我们只需算一种就好了。
设
枚举上一次的结尾
反思:不要先入为主,陷入思维困境,及时从死胡同里跳出来。不过原方法的有些部分可以借鉴,比如这题可借鉴从排列的角度入手。
P9020 [USACO23JAN] Mana Collection P
很不错的题。
首先还是得分析性质,发现可以在每个点一直等到某个时刻,然后再一次性跑到终点。
而且我们可以只在经过每个点的最后一次记录。
考虑正难则反,算一条路径的最小损失量,设其为
设
有一个问题是可能会插入长度大于
反思:正难则反,挖掘出性质后设计合理的算法解决问题。
P5336 [THUSC2016] 成绩单
设
考虑
离散化后时间复杂度
反思:难以维护的东西就写进状态。
[ARC185D] Random Walk on Tree
一开始从
将
答案即为
现在考虑
所以答案就是
反思:从特殊到一般的过程中,特殊情况可以多样化考虑,不能局限于一种。
P2685 [TJOI2012] 桥
删边最短路模板题。
在最短路树上考虑,记
- 若
,则最短路不变。 - 否则,枚举边
,若 都不包含边 ,则 可以用 来更新 的删边最短路。
但这样复杂度仍然不对。我们发现一条边
时间复杂度
P11189 「KDOI-10」水杯降温
真难吧。
考虑先做操作二再做操作一。这两个操作都有很浓烈的对「差分」的暗示,于是我们设每个点的差分值表示自己减去父亲。这样操作一相当于单点加一。
可以只用操作一完成的局面当且仅当所有节点的差分值小于等于
现在就是要保证每个点差分值合法的情况下要求根节点点权最小。设
发现每次操作二都会使除了
堆石子,每堆有 个,每次从 堆里取一个,每堆最多 次不取,问最多取多少次。
可以看作是先全取再用找一堆放回去。二分答案
最后只需判断
反思:对这种涉及一些抽象操作的一定要尝试简化操作,这不仅依赖于套路经验之谈,也跟做题直觉有关系。比如这题带有差分意向的暗示,就是解题的关键。
P11190 「KDOI-10」反回文串
比较好想的构造题,主要是特殊性质提示的很明显。
小于等于
否则,记
上述操作若都能匹配,剩下的要么是奇数,要么是偶数。对于奇数的就先拿出三个,剩下的再两两匹配就好了。
P9984 [USACO23DEC] A Graph Problem P
注意到给定过程其实是 Prim 算法。
但 Prim 算法我们不熟悉,于是我们从 Kruskal 算法考虑。建出重构树,我们发现一条连接了
线段树已经足以解决。但是有更简单的做法,就是带权并查集。tag 合并顺序从底向上,支持路径压缩。
P9130 [USACO23FEB] Hungry Cow P
感觉像是分治。
考虑动态开点线段树维护每一天的干草。
问题是这个东西怎么算答案??每个区间可以往右边区间贡献一些东西,使得答案的计算没有那么容易。
考虑楼房重建线段树,通过递归右儿子的方式来计算答案。
对于每个区间,我们维护区间答案
反思:线段树太好用了,学习 DS 的处理技巧。
P8907 [USACO22DEC] Making Friends P
可以感觉到是启发式合并,但是不知道怎么合并。
观察到若我们删除一个点之后暴力将与它相连的所有点两两之间连边,那之后可能还存在删点的情况,这是不优的。而因为删除顺序是
反思:对缩减边数规模降低复杂度的运用不够熟练。思考优化的时候可以从「如果暴力会带来怎样的不良影响」 的角度思考。
P8276 [USACO22OPEN] Hoof and Brain
太神了。
首先发现若存在一个点无出边,则 B 赢。这可以通过对反图拓扑排序实现。然后呢??
将原图中出度为
- 初始时每个点
。 - 若存在点
使得它出去的所有点颜色都相同,那么令所有颜色为 的点都变成该颜色 - 重复上述步骤直到无法操作。
这时我们发现,若
为什么?因为一个
如何维护
反思:大神染色法。
[ARC181D] Prefix Bubble Sort
发现要是在某一次排序过程中
使用链表维护即可???有点难写这东西。
其实我们可以换个角度,从被换到前面的那些数字入手。这些数每被往前滑动一次,逆序对就减少
反思:思维还是不够灵活,容易陷入死胡同走不出来,不肯换角度思考。
P8099 [USACO22JAN] Minimizing Haybales P
对于每个位置,在值域上二分出最小的能够换到这里的数,然后换到这里,这个东西要维护一个区间最大值、最小值。
这tm是错的,这东西没有单调性。
不如考虑每个数往前换,这样就好多了。
反思:一如既往的在子胡同里乱转。
CF1632D New Year Concert
设
首先有
有经典结论:固定右端点
于是我们可以求出所有以
时间复杂度
P8100 [USACO22JAN] Counting Haybales P
首先要注意到差值
但是一般的 DAG 拓扑序计数是不能做的,继续挖掘性质,发现奇数的拓扑序是唯一的,偶数也是,这样只有两条拓扑序固定的链相互连边,这样就能做了。
反思:DAG 拓扑序计数感觉是一种可以应用在某些计数题的好方法。这些计数题的元素之间存在一些先后顺序的要求,这时就可以应用这种模型。当然如何挖掘「差值为
CF2025E Card Game
首先题目的意思就是,同种花色内部比较,数值大的牌厉害。而花色
我们发现除了
现在有了
如何求
现在只需要计算合法的花色
最终答案就是
CF2025F Choose Your Queries
题解说这是经典问题。
考虑图论建模,将询问的两个点连无向边,现在要做的就是给每条边定向,并赋值。
我们发现,对于一组有公共点的边
现在问题就变成了将无向图划分成最多的边对,使得每个对的两条边都有公共点。这是经典问题:
我们在图的 DFS 树上考虑,设当前在
P11191 「KDOI-10」超级演出
设
对于一次询问,就是问区间
但是多一个
CF2030E MEXimize the Score
思考如何划分,显然分到一个集合内的数不能重复。
考虑往集合里加数,一开始所有集合的答案都是
设
最终答案是
由于
CF2030F Orangutan Approved Subarrays
为啥没做出来呢??
显然线段相交就不行(包含可以),否则就可以。记
对于区间
反思:不善于将转化后的模型套用经典的、通用的解法。就像这题,已经转化成了线段相交模型,但是还是没有去尝试跟排序有关的做法。当然直接分析也无问题,但是太唐了。
P9970 [THUPC 2024 初赛] 套娃
一类和
定义满足
有结论:极小的
考虑一个极小的
这说明:
考虑从 vector
。时间复杂度是
接下来考虑所有对应
于是问题就变成了有 set
维护一下就好了。
P10218 [省选联考 2024] 魔法手杖
首先考虑二分答案
第一个条件容易满足,关键在第二个。
建出 Trie 树,枚举
对于位运算,逐位确定答案是比二分答案更优的。
考虑
时间复杂度
P7831 [CCO2021] Travelling Merchant
考虑 DP,设
这样做的问题在于无法精确的给出一些点的初始值。
那么如何解决?我们需要继续挖掘图的性质,我们发现如果以
根据这个,我们可以从大到小考虑每一条边,然后综合拓扑排序与贪心设计一个算法,具体见 P7831。
反思:脑筋急转弯,多换角度思考。综合各种算法。
CF802L Send the Fool Further! (hard)
将这题和 CF1823F 混了。
那题求的是经过的期望次数,所以可以
但是这题是求步数,显然得倒推,于是你得
这样还是可以用套路去表出。
P5637 ckw的树
有点太难了吧。
想要用常用套路,但是因为涉及到距离
的形式。
最初的式子还含有儿子、儿子的儿子、兄弟三种。前面两种展开后都是简单的,关键在于后面一种。
在上面那个式子的基础上加上
代码抄的卷哥。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?