2022.2.10 题目

玄机

题意 : 给你 $m$ 个子串和一个长度 $n$, 求出有多少个长度为 $n$ 的主串满足这些子串都在主串中出现过。

数据范围 : $m \leq 4$, $\sum|\operatorname{str}| \leq 50$, $n \leq 10^9$。

题解 :由于是多串的匹配, 考虑建出 AC 自动机, 在每个子串的终止节点打上标记,那么一个满足条件的字符串必然是从起点出发走 $n$ 步,且经过所有的标记点至少一次。

考虑 dp,设 $f[i][j][S]$ 表示目前位于 $i$ 点, 已经走过了 $j$ 个点,且经过的标记点的集合为 $S$ 的方案。

转移就枚举每一条边就行了,恰好经过 $n$ 个点可以使用矩阵快速幂优化。

发现这个 $S$ 集合很麻烦, 于是我们想找到一种方法把 $S$ 去掉, 因为 $m \leq 4$, 可以考虑枚举子集容斥。

具体地, 枚举强制不经过的点集 S (为什么不是经过的点 ?因为你不计下 $S$ 后不能保证经过所有的点)

那么算出不经过某些点的答案 $ans$ 后, 考虑它对总答案的贡献,也就是它的容斥系数。 经过一系列繁(lian)琐(meng)复(dai)杂 (cai)的计算后, 可知是 $(-1)^{|S|}$。

可以这么来考虑 :不出现任意一个串的方案数 = 一个串没有出现的方案 - 两个串没有出现的方案 + 三个串没有出现的方案 ...

最终的答案就是总情况数 - 不出现任意一个串的方案, 推一下即可。

画心

题意 : 把一个长度为 $n$ 的序列划分成若干段,要求每段长度在 $L, R$ 之间, 每段的权值为 $ax^2 + bx+c$,其中 $x$ 是每段权值和, 求最大划分权值。

很显然的斜率优化, 两只 $\log$ 做法是直接上线段树套李超树。

一只 $\log$ 的做法还没听懂, 咕了。

注意本题会爆 long long,请使用 __int128。

求索

题意 :一棵树, 边有边权, 若一条路径的最大值与最小值之差不超过 $m$,则定义它的权值为 $mn \times len$,其中 $len$ 是边的总长, 求权值最大的路径。

常 数 大 赛

首先点分治 + 树套树或者三维偏序可以做到 3 只 log,树套树的常数巨大。

边分治 + 二维偏序可以做到 2 只 log,但要做两遍常数较大。

上一篇:cdq分治&整体二分 学习笔记


下一篇:ADAMoracle 广域节点网络即将正式上线