[杂谈] 日报 D22

花了大半个上午可算把昨天的贪心摆弄明白了 . 今天没有别的内容 , 还是看一眼梦熊题解 ( 感觉不太改的动 ) , 然后刷点 CF 得了 .

CF2115A

先刷道水娱乐一下 .

考虑最后可能都要归到所有 \(a_i\) 的 \(\gcd\) , 而且接受 \(O(nV)\) , 那就暴力 dp 出最少多少步能构造出一个 \(\gcd\) .

注意出现元素等于 \(\gcd\) 需要特判 , 除此之外因为求 \(\gcd\) 带 \(\log\) , 所以可以预处理 .

不过加点剪枝也能过去 .

扩展 : CF1043F

还可以扩展一个 \(n,V\le 2\times 10^5\) 的 . 考虑到把每个数消去 \(g\) 之后 , 把它视作质因子分解构成的集合 , 就是要找若干个数的并集是空集 . 显然这个多重集的大小是 \(O(\log V)\) 的 , 答案也是 \(O(\log V)\) 的 .

事实上可以发现答案会更小 , 因为拆解质因数的减少比底数为 \(2\) 的 \(\log\) 快 . 在这个范围内不超过 \(7\) .

这里想要做一个 \(\gcd\) 卷积的话 , 本质上是一个按位与卷积 , 用调和级数是 \(O(n\log n)\) , 或者用类似 FWT 的做法 , 可以用到埃氏筛的复杂度分析是 $O(n\log\log n) $的 .

当然对于选 \(k\) 个来说 , 发现变换之后的意义是 \(f_i\) 表示选一个集合 , 且 \(i\) 为公约数的方案数 , 是可以 \(\begin{pmatrix} cnt_i \\ k\end{pmatrix}\) 计算的 . 这样就有 \(f_i=\sum\limits_{i|j} g_i\) , 其中 \(g_i\) 表示 \(i\) 为最大公约数的方案数 .

然后更方便的做法是利用莫比乌斯反演或者直接调和级数递推来做 .

挺有意思的 .

CF2115B

考虑倒推 , 每个被覆盖了的位置往前推一步会变成任意取值 .

考虑任意取值的 \(x\) 和 \(y\) 合并到了 \(z\) , 显然要求的 \(x\ge z\) , \(y\ge z\) , 然后 \(x\) 和 \(y\) 中至少还要取一个 \(z\) .

发现这会使任意取值变为 \(x\ge a_x\) 的一种限制 , 并且在这个形式下的合并是简单的 .

现在的问题是如果合并到确定的取值 \(z\) , 还多出一个限制 , 即至少有一个恰好为 \(z\) . 不妨在此时让能取到 \(z\) 的先取成 \(z\) , 也就是取当前限制的下限 , 显然如果这个数被加上了其他限制就不可能取到 \(z\) , 否则这样取一定是最可能合法的选择 .

因此可以维护所有数的下界 \(a_x\) , 反推后就把 \(a_x\) 作为答案数组 , 并且正推一遍看是否合法 , 根据上面的讨论如果不合法就无解 .

好玩 . 大概算是自己想出来的 .

CF2115C

考虑直接 dp , 有把一层拆成 \(n\) 个单独拿的点的问题 , 直接把独立点个数装进状态 , 复杂度是 \(O(nmh^2)\) 的 .

注意到 , 没有拆层的那些点是一定会单点拿的 , 而这些单点拿完之后还拿单点 , 每次肯定会先把当前拆的层拿完 , 因此装单点的状态大小从 \(O(nh)\) 变成了 \(O(n)\) .

计算答案 , 需要枚举一定拿的单点在那一次拿完 , 然后再查询 dp 数组 .总复杂度 \(O(nmh+Tm^2)\) .

不错的 dp 题 , 优化状态思路很不错 .

posted @ 2025-06-17 21:32  youlv  阅读(38)  评论(0)    收藏  举报