技巧与结论
关于子序列的问题,回归到原序列中是选定位置 \(p_1,p_2\dots p_k\),对应值 \(v_1,v_2\dots v_k\),此时 \((p_k,n]\) 部分可以任意选,\([1,p1)\) 不能有 \(v_1\),\((p1,p2)\) 不能有 \(v_2\),以此类推。
例题:CodeForces-660E Different Subsets For All Tuples *2300
字典序比较转化成一个前缀一致,后一位不同,枚举不同的这一位。要求字典序较大的最小串或字典序较小的最大串,优先匹配尽量多之后再出现不同位置。
例题:CodeForces-1037H Security *3200
对于任何满足 \(f_n=xf_{n-1}+yf_{n-2}\) 的序列,都有:
当 \(\gcd(x,y)=1\) 时,还满足:
证明:闲话
例题:Luogu-P1306 斐波那契公约数、BZOJ-4833 最小公倍佩尔数
一个由中国剩余定理产生的推论:
对于同余方程组:
以及同余方程:
假定所有 \(x\) 的取值范围均为小于方程模数的自然数,则该方程解的个数等于拆成若干模数互质的方程解的个数之积。
显然满足 \(x^a \bmod {\prod_{i=1}^k p_i^{\alpha_i}}=b\) 就一定满足 \(x^a\bmod p_i^{\alpha_i}=b\)。
于是方程的解 \(x\) 一定与方程组中每个方程 \(i\) 的一个解 \(x_{i,j}\) 在模 \(p_i^{\alpha_i}\) 意义下同余,从而构造出线性同余方程组,解在给定取值范围内是唯一的。
因此存在多少组构造出的线性同余方程组,就存在多少个解。
在点分树上,节点 \(u\) 是 \(v\) 的祖先当且仅当原树上路径 \((u,v)\) 中 \(u\) 是第一个被选取的节点。
随机选取下一个分治点同样具有这样的性质,复杂度的期望可根据期望的线性性求出。即一个节点的深度为其产生的贡献,深度等价于点分树上祖先个数(包括自己)。
上面已经说到 \(u\) 是 \(v\) 的祖先当且仅当第一个被选取,概率为 \(\frac{1}{\mathrm{dist}(u,v)}\)。
因此答案应为:
可以统计每个距离对应路径个数,使用点分治以及 FFT 加速卷积,复杂度 \(O(n\log^2n)\)。
期望的线性性:
计算 \(\sum_{l=1}^n \sum_{r=l}^n f(l,r)\) 可以考虑计算 \(\sum_{l=1}^n \sum_{r=1}^n f(\min(l,r),\max(l,r))\) 再处理。
例题:AtCoder-ABC295_E Kth Number
平均数等于 \(x\) 等价于 \(\sum_{i=1}^n s_i-x=0\),也即 \(\sum_{s_i<x} x-s_i=\sum_{s_i>x} s_i-x\)。
例题:AtCoder-ARC104_D Multiset Mean
对 \(\mathrm{LIS}\) 的计数可以枚举偏序关系(离散化后的数组)再填值域。
例题:AtCoder-ARC104_E Random LIS
博弈论可以考虑“模仿操作”,即后手会由于某种目的模仿先手的操作从而保持局面没有实质改变。
对于树上任意节点 \(u\),其到所有节点路径中最大的一条 \((u,v)\),\(v\) 一定是树上直径的一端点。
证明考虑路径 \((u,v)\) 以及直径 \((x,y)\) 拐点 \(p\) 与 \(q\),如果 \((u,v)\) 最大则说明将路径与直径各自一半以及拐点的连边应当比直径更大。
例题:AtCoder-ARC108_F Paint Tree
单模式串子串匹配或回文子序列匹配,可以考虑使用卷积。
对于回文而言就是卷到对称中心二倍的位置,正常的匹配可以将模式串翻转就等价于回文了。
通配符匹配可以先卷积求出有多少位置有通配符,再将通配符设成 \(0\),\(s\) 串字符从小到大设成 \(base^0,base^1\dots base^{25}\),\(t\) 串字符从小到大设成 \(base^{25},base^{24}\dots base^0\),卷积后结果应该是 \(base^{25}\) 的幂,指数为长度减去通配符个数。
例题:Luogu-P4199 万径人踪灭、Luogu-P4173 残缺的字符串
答案要求所有满足条件集合的 \(\gcd\) 之和,大多是只考虑 \(i\) 的倍数再容斥,同时只考虑 \(i\) 的倍数指向了根号分治。
题目形如每个元素有一权值 \(v_i\),可以放在位置集合 \(S_i\),每个位置只能放 \(a_j\) 个元素,求合法的最大权值和。
使用 拟阵 或模拟费用流的每次增广可以证明从大到小能放即放一定不劣,接下来就是常规二分图匹配,从大到小加入元素判断是否有完美匹配,使用 Hall 定理。可能需要数据结构维护。
多组询问,每次询问规模为 \(k_i\),\(\sum k_i\) 与 \(n\) 同级,则 \(k_i\) 的取值有 \(O(\sqrt{n})\) 中,可以离线暴力。
树上距离满足某个条件的二元组、三元组计数,考虑在 \(\mathrm{LCA}\) 而不是路径交点位置统计,这样可以长链剖分优化。
例题:Luogu-P5904 POI 2014 HOT-Hotels 加强版
树上黑白染色连通块统计,在连通块深度最小位置记录答案,那么只需判断 \(col_u=1\) 且 \(col_{fa_{u}}=0\)。
有序链表插入 \(O(\log n)\),删除 \(O(1)\),可以使用只删除莫队降低复杂度。
树上 DP 和组合计数有关时,需要排列数之类的情况可以改成算概率,这样子树间独立。
树上 \(k\) 级祖先可以重链剖分在 DFS 序上暴跳链顶,再在某一重链取到结果(重链上 DFS 序连续),比倍增常数小。
树上关于 \(k\) 级祖先的二分也可以重链剖分在 DFS 序上暴跳链顶,再在某一重链上二分,比直接二分少一个 \(\log\)。
莫比乌斯反演后不能直接数论分块且多次询问的问题,可以考虑对 \(\left\lfloor\dfrac{n}{T}\right\rfloor\) 关于 \(B\) 分治,通常是大于直接枚举暴力算,小于预处理函数。
例题:Luogu-P4240 毒瘤之神的考验、Luogu-P5572 CmdOI 2019 简单的数论题
形如 \(\left|\sum a_i\right|\) 的可以设 \(S^+=\sum a_i[a_i>0],S^-=\sum -a_i[a_i<0]\),这样就转成 \(\max(S^+,S^-)-\min(S^+,S^-)=S^++S^--2\min(S^+,S^-)=\sum |a_i|-2\min(S^+,S^-)\),可以化简问题。
例题:AtCoder-ARC107_F Sum of Abs
统计有多少节点是祖先中第一个符合条件的,也就是有多少节点本身合法且父亲不合法,就是对合法节点构成的子树计数,有等式:
因此令合法节点权值为 \(2-deg_u\),求权值和即可。(应用前提是满足父亲合法儿子一定合法。)
例题:Luogu-P4183 USACO 2018 JAN Cow at Large P
一个图的最小度数不会大于 \(\sqrt{2m}\),可以暴力枚举。
例题:Luogu-P8905 USACO 2022 DEC Strongest Friendship Group G
有等式 \(n^2=2\binom{n}{2}+\binom{n}{1}\) 成立,当贡献为平方时,可以考虑拆成点对计算。
曼哈顿距离转切比雪夫距离:
曼哈顿距离 \(|x_1-x_2|+|y_1-y_2|\) 可以表示为 \(\max(x_1-x_2+y_1-y_2,x_1-x_2+y_2-y_1,x_2-x_1+y_1-y_2,x_2-x_1+y_2-y_1)\),这等价于 \(\max(|(x_1+y_1)-(x_2+y_2)|,|(x_1-y_1)-(x_2-y_2)|)\),也就是 \((x,y)\) 改为 \((x+y,x-y)\)。
切比雪夫距离转曼哈顿距离:
直接倒着回去变成 \((\frac{x+y}{2},\frac{x-y}{2})\) 即可。