2024 10 做题笔记
做题重心可能逐渐转向模拟赛以及补题,会在其他博客里写到,因此做题笔记就不按日期排序,随缘更新。
P11146 「SFMOI Round I」Strange Train Game
比较巧妙的转化性质题,写了题解。
P11094 [ROI 2021 Day 2] 砍树
这类“每个点权都有一个固定的生效范围”类题目最近好像遇到了很多次,主要思路貌似都是利用单调性求出这个合法范围。
不难发现一棵树如果最后向左倒下,那么它右边的树怎么倒对它其实都是没影响的,右边倒下同理,并且我们还可以发现如果把区间左端点拉得越长,这棵树越有可能倒下。
因此考虑求出左端点能使得每棵树倒下的最小取值,由于此时区间内的树是可以向左或向右倒下的,你不能直接对覆盖到的树的 \(L_i\) 取 \(\max\),但是哪些树可以向右倒下是好维护的,单调栈即可,剩下的必须向左,线段树维护。
还有一种求法是直接整体二分,这样写起来更方便,最后就是容斥一下加个二维数点。
P11095 [ROI 2021 Day 2] 旅行
题目里给的限制是不能走走过的边,这实际上启发我们对原图缩边双,以 1 为根建圆方树,路径上割边是必须经过的,剩下的就是对每个方点求点到点的贡献。
但是方点的贡献还是二元的,不是很方便操作,直接考虑暴力钦定一方,发现钦定最大值比较方便,剩下的就是问路径边权最小值。
我们直接从小到大遍历每条边,每次加入,如果连接的两个点不连通就直接合并,否则相当于路径上点双合并然后更新权值,注意到实际上子树内每个点都能被修改到,因此就是简单的子树修改,然后用最小和最大更新答案。
P3226 [HNOI2012] 集合选数 & AT_arc184_b [ARC184B] 123 Set
两题一个套路,就一起讲了。最后的答案肯定是从指数上得来的,因此先把所有数分解成 \(q\cdot 2^x \cdot 3^y\) 的形式。
首先不同的 \(q\) 一定相互不影响,而如果我们选中一个 \(q\cdot 2^x \cdot 3^y\) 就会对 \(q\cdot 2^{x+1} \cdot 3^y\) 和 \(q\cdot 2^x \cdot 3^{y+1}\) 造成影响,观察指数,如果把 \((x,y)\) 看做平面点对,这相当于覆盖上面和右边的点。
考虑这张图的形态,你发现它长宽都很小,因此可以直接上装压 dp,P3226 就做完了。
数据范围更大呢?更细致地分析一下,你会发现 \(\lfloor \frac{n}{q}\rfloor\) 一样的 \(q\) 图形态也是一样的,因此整除分块一下就能做到比较好的复杂度了,可以通过 [ARC184B]。
AT_arc132_f [ARC132F] Takahashi The Strongest
题目看上去就很能容斥,先固定一组小 C 的策略算方案,设小 C 的策略为 \(T\) 的答案为 \(h(T)\),设 \(f(S)\) 和 \(g(S)\) 分别表示小 A 的策略和小 B 的策略包含集合 \(S\) 的方案数,这里的包含指的是恰好在对应位置选了对应数,我们就能得到 \(h(T)=\sum_{S \subset T,s\neq \emptyset} (-1)^{|S|-1}f(S)g(S)\)。
先考虑怎么算 \(f(S)\) 和 \(g(S)\),你会发现这个东西本质上就是一个高维前缀和,把连续两个二进制位压缩表示一个状态,分别是剪刀石头布或者通配符,跟普通的高维前缀和一样做就行。
算出来 \(f\) 和 \(g\) 之后对应位置作乘法,倒着变换回去也是类似的,记得加上容斥系数。
AT_arc101_d [ARC101F] Robots and Exits
显然每个机器人只可能从左右两边的出口出去,设其到两边的距离分别是 \(L_i\) 和 \(R_i\),如果它从左边出去了,那么我们在最多往右走 \(R_i\) 的这一时刻前就已经最多往左走了 \(L_i\)。
另外一个很简单的观察是我们的路径一定形如左右左右左右,每次都突破上一次的最大值,否则这次行走是无意义的。二维的东西不好处理,考虑把所有 \(L_i\) 和 \(R_i\) 按照 \(L_i\) 排序,最后往左走记为 0,往右记为 1,问题转化为对这样一个有限制的 01 序列计数。
接下来就很容易 dp 了,注意此时我们是在对 01 序列计数,状态最好绑定在每个机器人身上,否则不好判重。记一个 \(f_i\) 表示最后一次往右走走到 \(R_i\) 的方案数,转移就是找到 \(R_i\) 比它小的直接转移即可。
P3308 [SDOI2014] LIS
学习了退流板子。
P11188 「KDOI-10」商店砍价
注意到你在全部删除之前剩的位不会很多,暴力搜每个剩的有没有可能剩下即可。
P11189 「KDOI-10」水杯降温
教科书式的观察性质题,写了题解。
P11190 「KDOI-10」反回文串
把两个 sub 的做法拼起来就对了,大概就是讨论一下众数和谁匹配。
P11191 「KDOI-10」超级演出
观察到区间有单调性,类似上面“每个点权有固定范围”,但是这个题限制是比较宽松的,直接考虑从左往右扫,每次需要查一些前驱后继之类的东西,把点根号分治一下就做完了。
P11160 【MX-X6-T6】機械生命体
trie 合并以及子树 +k 板子,把 +1 的找链 reverse 换成推 tag 即可。
P9394 白鹭兰
双极定向类题目,把 \(k=1\) 的情况推广变成在圆方树上找一条链使得缩掉的点和最小。
P11219 【MX-S4-T3】「yyOI R2」youyou 的序列 II
感觉...不如原神,特殊性质是很有启发性的,不难发现合法条件是一方能操作到的最左和最右端点另一边没办法同时操作到,上线段树简单维护一下。
P11220 【MX-S4-T4】「yyOI R2」youyou 的三进制数
阅读题,连边之后就是圆方树上 dp,比较简单。
qoj9463 基础 ABC 练习题
非常炫酷的题!主要讲一下容斥思路,一开始想到了贪心判定但是假了,按照种类分类再贪心确实是很好的思路。
首先考虑判定怎么做,题目的条件是很松的,每个子串在原序列中都是一个子序列,这似乎启发我们对方案进行调整,调整到一个分配不劣的情况。可以考虑这样做,把前 \(x\) 个 \(\text{A}\) 全部分配给 \(\text{ABC}\),后面的同理,这样做的正确性是显然的。
计数怎么做呢?尝试结合上述做法,钦定 \(x\)、\(y\)、\(z\) 表示三种子序列的数量,设 \(f_{a,b,c}\) 三种字符目前分别有这三种数量,且前面都合法的方案数,转移不难。那这样我们就得到了一个 \(O(n^5)\) 的做法?实际上这是错的,考虑每个字符串都会在其合法的 \(x\) 和 \(y\) 处被统计到,因此这样会算重。
一个暴力的解决方法是子集容斥,每次钦定两个集合的 \(x\)、\(y\) 然后判定,但是这个题的限制还有更好的性质。仔细考察你的判定方式可以发现,对于一个字符串和一个 \(x\),合法的 \(y\) 是一个区间,反过来也是一样的。
这带来了什么呢?考虑将一个字符串所有合法的 \((x,y)\) 在二维平面上画出来,这些点实际上形成了一个凸多边形,考虑对其分维度点边容斥,先对 \(y\) 做,把竖着的列变成点,再对 \(x\) 做,这样之后个小方格会被多减,再容斥一遍加回来即可。复杂度是 \(O(n^5)\) 的,注意实现常数,我的代码常数过大,拼尽全力无法战胜/qiao。

浙公网安备 33010602011771号