4月杂题
距离 NOI2023 还有 109 天,不能再沉溺于省选的成功了。开始更新博客!
4 月重点在 whk 上,不会更很多,为了调和 whk 的。
1.[NOI 2023 联合省选] 填数游戏
考虑对于第 \(i\) 个数,把 \(T_i\) 中的两个数连边,特别地,只有一个数连自环。
此时每个连通块只能是树/基环树。
基环树是好做的,因为后手只有两种取法,算一算就好了。
对于树,可以转化成:点有权值,对于一些边可以子树内+1/子树外+1,要使得最小点权最大。
有结论:取子树内的边一定是根到某个点 \(x\) 路径上所有能取的边。
原因是,考虑两个没有祖先关系的子树,同时取子树内不如同时取祖先外;对于两个有祖先关系的 \(x,f\) ,\(x\) 取子树内,\(f\) 取子树外不如 \(x\) 取子树外,\(f\) 取子树内。
可以画图理解一下。
由此,两遍 dfs ,第一次把每个子树的点权最小值算出来,第二次计算每个 \(x\) 的答案即可。复杂度是线性的。哎,这个没做出来很拉。
2.P4769 [NOI2018] 冒泡排序
首先观察到有 \(x>y>z\) 就寄了,继而发现没有 \(x>y>z\) 这个条件是充要的,而这个又能用某 D 氏定理转化成,能够拆成两个上升子序列。
先做没有字典序的限制,考虑取的两个子序列,一定有一个的末端是全局最大值。\(f_{i,j}\) 表示还要填 \(i\) 个数,其中 \(j\) 个数 > 另一个子序列末端。
讨论一下发现 \(f_{i,j}=\sum\limits_{k=0}^j f_{i-1,k}\) 。把图画出来就一目了然了,就可以把 \(f\) 写成两个组合数相减的形式。
至于有字典序的限制,枚举相同的前缀后,大概需要求一个 \(\sum\limits_{k=0}^p f_{n,k}\) ,根据定义这就是 \(f_{n+1,p}\) ,就做完了。
3.CF1508D Swap Pass
首先,如果排列只形成一个置换环,就随便取一个点连菊花即可。
现在有多个环,考虑通过一些操作变成一个环,且尽量不影响答案。我们知道,还是考虑最后的菊花,发现按极角排序后,每次取相邻两个不在同一环的点交换即可。
需要注意的是不要取夹角 > 180 度的两个点,简单的解决方法是一开始取横坐标最小的点。
4.CF1610F Mashtali: a Space Oddysey
首先思考只有边权为 \(1\) 怎么做,发现把度数为奇数的点都连向一个虚拟点,跑欧拉回路即可。
对于有边权为 \(2\) ,它取的方法可能很多,但我们尝试强化条件,来更方便的构造欧拉回路:
我们设 \(a_x\) 表示 \(x\) 考虑边权为 \(1\) 时的度数,\(b_x\) 表示为 \(2\) 的度数。
若 \(a_x,b_x\) 有一个是偶数,则为偶数的要求入=出,为奇数的要求 |入-出|=1,这样一定满足条件。
若 \(a_x,b_x\) 皆为奇数,则需要一个入-出=1,一个出-入=1。
发现除了第二种情况,我们完全可以拆成两个图分别处理问题。处理第二种情况,在 \(x\) 和 \(x+n\) 连边即可。
5.CF1781G Diverse Coloring
树上的构造有很多都是从叶子开始玩,这个题也不例外。
先观察样例,大多数时候答案都是 点数 mod 2。其实只有样例给出的情况会使答案变大。
核心:尝试把树剖成一些长度为 \(2\) or \(3\) 的链。如果能剖出来就做完了。回忆一下,我已经见过重链剖分,长链剖分,菊花剖分了。这个叫短链剖分吗(
剖是很容易的:由于是二叉树,从下而上贪心的弄,传到父亲时要么剖好了要么剩一个根。
对于当前点如果两边剩至少一个就能串起来,都没剩的话,考虑如果有一个儿子连的是长度为 \(2\) 的链,也能串起来。
这样子搞,如果最后还剩一个点,分两种情况:
如果这个根有两个儿子,就直接串起来形成一个 \(7\) 连通块,它一定能黑白染色使得 4黑 3白 且满足题目条件,可以讨论一下。
只有一个儿子就不好搞,所以我们的构造一开始就取度数为 \(2\) 的当根。
没有度数为 \(2\) 的点时:
如果是样例的情况就寄了。
否则,考虑取一对兄弟叶子,把这俩点和父亲串成一个三连通块然后删掉,这样子它们的爷爷度数就为 \(2\) 了。
6.P5518 [MtOI2019]幽灵乐团
最难的 case: \(\prod\limits_{i=1}^A \prod\limits_{j=1}^B \prod\limits_{k=1}^C \gcd(i,j)^{\gcd(i,j,k)}\) .
考虑对 \(\gcd(i,j,k)\) 施加 \(\varphi*I=ID\) ,可得 \(\prod\limits_{p=1}(\prod\limits_{i=1}^{\left\lfloor\dfrac{A}{p}\right\rfloor}\prod\limits_{j=1}^{\left\lfloor\dfrac{B}{p}\right\rfloor}p\gcd(i,j))^{\varphi(p)\left\lfloor\dfrac{C}{p}\right\rfloor}\) 。
考虑计算 \(f(i,j)=\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\gcd(i,j)\) 。枚举 \(\gcd(i,j)\) 并施加 \(\mu*I=e\) ,可得 \(\prod\limits_{p=1}\prod\limits_{d=1}p^{\mu(d)\left\lfloor\dfrac{A}{pd}\right\rfloor\left\lfloor\dfrac{B}{pd}\right\rfloor}\) 。
\(O(n\log n)\) 预处理 \(g_T=\prod_{d|T} d^{\mu(\frac{T}{d})}\) ,上式枚举 \(pd=T\) 可得 \(\prod\limits_{T=1}g_T^{\left\lfloor\dfrac{A}{T}\right\rfloor\left\lfloor\dfrac{B}{T}\right\rfloor}\) ,整除分块即可 \(O(\sqrt{n}\log n)\) 算出。
回到一开始要求式子,可写成 \(\prod\limits_{p=1}(p^{\left\lfloor\dfrac{A}{p}\right\rfloor\left\lfloor\dfrac{B}{p}\right\rfloor}f(\left\lfloor\dfrac{A}{p}\right\rfloor,\left\lfloor\dfrac{B}{p}\right\rfloor))^{\varphi(p)\left\lfloor\dfrac{C}{p}\right\rfloor}\) 。
预处理 \(p^{\varphi(p)}\) 的前缀积即可。复杂度是 \((\sum\limits_{i=1}^{\sqrt{n}} \sqrt{n/i})\log n=n^{\frac{3}{4}}\log n\) 。
这篇写完以后我停更了很长一段时间,一开始觉得写博客浪费时间就断掉了,后来发现训练状态越来越差,整天在机房无所事事。看来博客对我来讲是很重要的调节方式啊。
和妹子聊天也是极好的,但我也很久没机会和她接触了。
现在是 5 月 3 日,把摆烂期间做的一些题记下来。
7.CF1801G A task for substrings
先考虑一个前缀怎么做,发现可以建 AC 自动机在上面跑。考虑把 \([x,y]\) 的答案拆成两个前缀的答案相减,再减 \(1\le l<x\le r\le y\) 的串贡献。
如果没有 \(y\) 的限制,考虑我们用对正反串分别建出 AC 自动机,则可以把问题转化成,现在得到两个点,分别取一个在 fail 树的祖先,使得拼起来是一个给出的串。
我们枚举给出的串以及划分的位置,就可以通过拍 dfn 序转化成二维偏序了。
现在考虑 \(y\) 的限制,相当于是要倍增到一个长度 \(\le y-x+1\) 的点,这是简单的。