闲话 23.01.01

闲话

今天打了一会儿 mc。组齐了一套下界合金装备,杀了龙。
本来是打 1.19 的,但因为繁茂洞穴和 gamma 锁 1.0 弃了
转 1.18 带小地图等辅助模组的档。

今天的推歌是《白夜》Reol
Reol 的歌真好听!
啊突然看到 Chinozo 发新歌了!一并推一下:
Chinozo「起司/チーズ」feat.KafU
\KafU/\KafU/\KafU/\KafU/\KafU/

有点晚了,就写到这吧。

多项式怎么学?

好耶今天是 1.1!
23.01.01! 我当时编号带年果然没错!

多项式杂题

感觉多项式学了点皮毛,写点题。具体的内容讲解大概以后会找时间写(贺 APJ)的。

[ZJOI2014]力

给出 \(n\) 个数 \(q_1,q_2, \dots q_n\),定义

\[F_j~=~\sum_{i = 1}^{j - 1} \frac{q_i \times q_j}{(i - j)^2}~-~\sum_{i = j + 1}^{n} \frac{q_i \times q_j}{(i - j)^2} \]

\[E_i~=~\frac{F_i}{q_i} \]

\(1 \leq i \leq n\),求 \(E_i\) 的值。

\(1 \leq n \leq 10^5\)\(0 < q_i < 10^9\)

[ZJOI2014]力 / 快速傅里叶变换基础练习题。

\(q_0 = 0\),可以发现

\[E_i = \sum_{j = 1}^{i - 1} \frac{q_j}{(i - j)^2}-\sum_{j = i + 1}^{n} \frac{q_j}{(i - j)^2} = \sum_{j = 1}^{i} \frac{q_j}{(i - j)^2}-\sum_{j = i}^{n} \frac{q_j}{(i - j)^2} = \sum_{j = 0}^{i} \frac{q_j}{(i - j)^2}-\sum_{j = 0}^{n - i} \frac{q_{n - j}}{(n - i - j)^2} \]

我们直接设 \(f_i = q_i, g_i = 1 / i^2\),并令 \(f_0 = g_0 = 0\)。令 \(F(x)\)\(f_i\) 的 ogf,\(G(x)\)\(g_i\) 的 ogf,\(E\)\(E_i\) 的 ogf。设 \(F^T(x)\) 为倒转 \(F\) 系数得到的 ogf。

\(E = F \times G - (F^{T}\times G)^T\)

计算即可。

Submission.



bzoj3451 Normal

定义在一棵树上的点分治消耗时间按如下方式计算:

  • 初始化时间为 \(0\)
  • 一个接受单个联通块的函数 \(\text{solve}(B)\) 按如下方式执行:
    • 时间 \(+= |B|\)
    • 如果 \(|B| = 1 ~ : ~\) 退出函数。
    • 反之 \(~ : ~\) 随机选择一个 \(B\) 中的节点 \(x\),在 \(B\) 中删除 \(x\),分别地递归得到的所有联通块。
  • 总消耗时间即为函数完全结束后得到的答案。

给定一棵树。计算该树做如上的点分治所消耗的期望时间。

\(n\le 30000\)

期望线性性,我们能知道这就是计算每个点在点分树上的期望深度之和。然后考虑分别计算再求和。

假设 \(X_i\)\(i\) 节点深度的随机变量,我们知道 \(E[X_i]\) 就是 \(\sum_{j=1}^n [\ i \ 在 \ j \ 子树内的期望]\)。这个期望其实就是概率。具体地刻画,我们假设 \(S(i)\)\(i\) 子树节点集合,有

\[E[X_i] = \sum_{j=1}^n [i \in S(j)] \]

考虑点分树的经典性质:\(i\)\(j\) 的祖先当且仅当 \(i\to j\) 的路径上 \(i\) 首先被删除。记 \(i\to j\) 路径的长度是 \(dis(i, j)\),这个玩意用点分树刻画就是

\[E[X_i] = \sum_{j=1}^n \frac{1}{dis(i, j) + 1} \]

\(c_i\)\(i\) 长度路径的数量。答案即为

\[\sum_{i=1}^n\sum_{j=1}^n \frac{1}{dis(i, j) + 1} = \sum_{i=0}^n\frac{c_i}{i + 1} \]

我们只需要求长度为 \(i\) 路径的数量。注意到转移是卷积形式。具体地,假设一棵子树内 \(i\) 长度的路径是 \(c_{1, i}\) 条,另一棵子树内 \(j\) 长度的路径是 \(c_{2, j}\) 条,这两棵子树上长度为 \(i + j\) 的路径数量就得加上 \(c_{1, i}\times c_{2, j}\)。这也就是将 \(c_1\)\(c_2\) 的 ogf 乘起来。

使用多项式维护点分治过程做到 \(O(n\log^2 n)\)。常数好像巨大,但我可不写这玩意。

这个!多项式优化点分治!



bzoj3771 Triple

我们讲一个悲伤的故事。 从前有一个贫穷的樵夫在河边砍柴。 这时候河里出现了一个水神,夺过了他的斧头,说: “这把斧头,是不是你的?” 樵夫一看:“是啊是啊!” 水神把斧头扔在一边,又拿起一个东西问: “这把斧头,是不是你的?” 樵夫看不清楚,但又怕真的是自己的斧头,只好又答:“是啊是啊!” 水神又把手上的东西扔在一边,拿起第三个东西问: “这把斧头,是不是你的?” 樵夫还是看不清楚,但是他觉得再这样下去他就没法砍柴了。 于是他又一次答:“是啊是啊!真的是!” 水神看着他,哈哈大笑道: “你看看你现在的样子,真是丑陋!” 之后就消失了。 樵夫觉得很坑爹,他今天不仅没有砍到柴,还丢了一把斧头给那个水神。 于是他准备回家换一把斧头。 回家之后他才发现真正坑爹的事情才刚开始。 水神拿着的的确是他的斧头。 但是不一定是他拿出去的那把,还有可能是水神不知道怎么偷偷从他家里拿走的。 换句话说,水神可能拿走了他的一把,两把或者三把斧头。 樵夫觉得今天真是倒霉透了,但不管怎么样日子还得过。 他想统计他的损失。 樵夫的每一把斧头都有一个价值 A_i,不同斧头的价值不同。总损失就是丢掉的斧头价值和。 他想对于每个可能的总损失,计算有几种可能的方案。 注意:如果水神拿走了两把斧头a和b,(a,b)和(b,a)视为一种方案。拿走三把斧头时,(a,b,c),(b,c,a),(c,a,b),(c,b,a),(b,a,c),(a,c,b)视为一种方案。所有数据满足:Ai<=40000,n<=40000。

*看题面
*看不懂
*:我希望你对你的人生也是这个态度.jpg

我们直接对斧头的价值做桶。具体地,我们设

\[F(x) = \sum_{i=0}^{\infty} \left(\sum_{j=0}^n [A_j = i]\right) x^i \]

这样就好统计答案了。

首先考虑拿走三把斧子时每种价值和的方案对应的 ogf。如果可以拿走相同的斧子 + 不去重,答案就是 \(F^3(x)\)。现在不能有重复的斧子,咋办?
观察可以发现,选择 \(k\) 把相同的斧子对应的方案 ogf 就是 \(F(x^k)\)。因此我们不妨做容斥。我们先减去钦定两把斧子相同的情况,某种情况有三种可能。然后发现钦定三把斧子相同的情况被减去了三次,但它只有一种可能,因此要再加上两倍的钦定三把斧子相同的情况。也就是说,拿走三把斧子并去重的答案 ogf 就是

\[\frac{F^3(x) - 3F(x)F(x^2) + 2F(x^3)}{6} \]

两把斧子的容斥就更简单了,\(\left(F^2(x) - F(x^2)\right) / 2\)。一把斧子不用容斥。

于是答案 ogf 就是

\[\frac{F^3(x) - 3F(x)F(x^2) + 2F(x^3)}{6} + \frac{F^2(x) - F(x^2)}2 + F(x) \]

实现可以先把 \(F(x), F(x^2), F(x^3)\) 转点值,在点值上做如上的计算,最后再 IDFT 回去就行了。建议用 FFT 实现,常数小。

Submission.



bzoj3160 万径人踪灭

给定 \(\Sigma = {a, b}\) 的字符串 \(T\),找到 \(T\) 中的不连续回文子串。这里的回文子串满足提取后字符回文且原位置关于一个值对称。

\(|T| \le 10^5\)

容易发现连续的回文子串位置也关于一个值对称。因此我们先不考虑连不连续,算出所有位置关于一个值对称的回文子串后减去回文子序列数量就行。回文子序列直接 Manacher,不展开。

考虑任意的回文子串,它关于 \(x\) 对称,即 \(T[i] = T[2 x - i]\)。我们不妨统计出对于每个 \(2x\) 满足前面条件的点对 \(f_i\)。容易发现最后的答案就是 \(\sum 2^{f_i} - 1\)。这个玩意咋求呢?我们可以分开对每个字符求这个东西,最后把 \(f_i\) 对应位置加和就行了。

对字符 \(a\),直接构造 \(F(x) = \sum_{i} [T[i] = a]x^i\)\(T^2\) 即为所求。

实现时可以不用任意模数多项式乘法,因为 \(f_i \le n\)

Submission.



bzoj3456 城市规划

给定 \(n\),求 \(n\) 个点的简单无向连通图数量。

\(n\le 10^5\)

其实说这题就只想强调一句话:
假设 \(A, B\) 是两个 egf,且 \(A = \exp B\),那么 \(B = \ln A\)

考虑 \(\exp\) 在 egf 上的组合意义,\(B\) 如果描述了一类组合个体,那 \(A\) 就是这类组合个体的有标号组合,这点可以方便地通过简单的个体构造出复杂的群体。(例:有标号荒漠计数);
相对应地,如果群体是复杂的,但是组成它的个体可以方便地求得,那我们可以通过群体 egf 的 \(\ln\) 来生成单个个体,这点是很重要的。

对于这题,组合个体就是简单无向连通图,而群体是简单无向图。\(n\) 个点的简单无向图数量是好求的,每条边随意选择,因此就是 \(2^{\binom{n}{2}}\)。简单无向图是由各个联通块组成的,这些联通块就对应着简单无向连通图。因此做 \(\ln\) 即可得到答案。

实现上可以选个快点的板子。

Submission.

posted @ 2023-01-01 21:46  joke3579  阅读(96)  评论(4编辑  收藏  举报