2023.4.13 闲话

省选 D1T1 爆零我还以为是点差分的问题,后来听人说点差分没卡后看了一眼代码原来是测完样例后改了一下,大样例过了,小样例炸了 .

知道 CCF 大样例弱,没想到比小样例还弱,绝了我草 .


卡了一个洛谷 bug:


对于常数 \(x\) 定义:

\[f(n)=\begin{cases}1&n=0\\\displaystyle\sum_{j=1}^xf(n-j)&\text{otherwise.}\end{cases} \]

尽可能快速求 \(f\)

Algorithm 1. 矩阵快速幂 \(\Theta(x^3\log n)\) .

Algorithm 2. 考察差分 \(f(n)-f(n-1)\),展开一层递推可以得到 \(f(n)-f(n-1)=f(n-1)-f(n-x-1)\),即 \(f(n)=2\cdot f(n-1)-f(n-x-1)\) .

看作一个图上带权路径权值和问题,枚举经过了权值为 \(-1\) 的边的个数可以得到 \(f\) 的一个表达式:

\[f(n)=\sum_{i = 0}^{\lfloor n / (x + 1) \rfloor} {(-1)}^i 2^{n - i (x + 1)} \binom{n - i x}{i} \]

假设你能 \(\Theta(1)\) 求解 2 的次幂和组合数,则直接计算的时间复杂度即为 \(\Theta(n/x)\) .

把这两个拼起来平衡,可以得到一个 \(\Theta(n^{3/4}\log^{1/4}n)\) 的做法 .

对于常数 \(x\) 定义:

\[f(n)=\begin{cases}1&n=0\\\displaystyle\sum_{j=1}^x(-1)^jf(n-j)&\text{otherwise.}\end{cases} \]

尽可能快速求 \(f\)

Algorithm 1. 矩阵快速幂 \(\Theta(x^3\log n)\) .

Algorithm 2. 考察 \(f(n)+f(n-1)\),根据类似做法可以得到 \(f(n)=(-1)^xf(n-1-x)-2\cdot f(n-1)\) .

那么还是看作一个图上带权路径权值和问题,枚举经过了权值为 \((-1)^x\) 的边的个数可以得到 \(f\) 的一个表达式:

\[f(n)={(-1)}^{n-1}\sum_{i = 0}^{\lfloor n / (x + 1) \rfloor}2^{n - i (x + 1)} \binom{n - i x}{i} \]

假设你能 \(\Theta(1)\) 求解 2 的次幂和组合数,则直接计算的时间复杂度即为 \(\Theta(n/x)\) .

把这两个拼起来平衡,可以得到一个 \(\Theta(n^{3/4}\log^{1/4}n)\) 的做法 .

(UPD. Algorithm 1 换成常系数齐次线性递推可以更快,LOJ #547 匹配字符串

posted @ 2023-04-13 16:39  Jijidawang  阅读(67)  评论(1编辑  收藏  举报
😅​