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\) 得到
那么可以 \(\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\) 的杨表用勾长公式计算方案数即可。