2022.2.14 模拟赛

今天是什么日子?

A 白

只能照着题解补题咯。

可以先求出来 \(f(x,y)\) 表示走 \(x\) 步,价值为 \(y\) 的方案数。暴力需要做 \(m\)\(\mathcal O(n^3)\) 的矩阵乘法。

考虑 \(Q_s(A)\) 表示 \(A\) 矩阵 \(i,j\) 与起来为 \(s\) 的点值之和。这是一个线性函数,满足 \(Q_s(A+B)=Q_s(A)+Q_s(B),Q_s(kA)=kQ_s(A)\)

目的是求出 \(\{Q_s(A^i)\}i\) 的线性递推。设 \(A\) 矩阵特征多项式为 \(C(x)=\sum_ic_ix^i\),由 \(F(A)=0\) 得到

\[\begin{aligned} \sum_ic_iA^i&=0\\ Q_s(\sum_ic_iA^i)&=0\\ \sum_ic_iQ_s(A^i)&=0 \end{aligned} \]

那么可以 \(\mathcal O(n^2m)\) 递推 \(f\) 了。

然后 \(g(i)=\sum_{j<i}g(j)\times f(i-j)\),这里的 \(\times\)\(\mathrm{and}\) 卷积。FWT 得到点值后,每一位做分治 FFT(可以多项式求逆)即可。这部分复杂度 \(\mathcal O(nm\log m)\)

B 胖

先整体二分每个点“破产”的时间,后面就好说了。

整体二分需要单点“轰炸”、单点查询。轰炸时,只用修改距离 \(< 16\) 的点,直接点分树暴力维护。

总复杂度 \(\mathcal O(n\log^3n)\),但是跑不满就轻松过了。

题解的 2log 高明做法看不懂欸。

C 圆

做法 1

一个排列的合法条件:按值从小到大插入点,维护若干个上升的链,每个点接在最近的链尾。最后链数 \(\le 3\) 即合法。

那么 DP 记录三条链的链尾,第三条一定是末尾不用记,就可以 \(\mathcal O(n^4)\) 乃至 \(\mathcal O(n^3)\) 了。

做法 2

两个形状相同的杨表对应一个排列。

枚举行数 \(\le 3\) 的杨表用勾长公式计算方案数即可。

posted @ 2022-02-14 18:50  RenaMoe  阅读(73)  评论(0编辑  收藏  举报