01 2025 档案
摘要:min-max 容斥,又名最值反演(我其实更喜欢后面这个名字),是一种常用的反演思想。 引入 在皇后游戏一题中,我们曾经证明过 \(\max(a,b)-a-b=-\min(a,b)\)。 我们尝试推广亿下下这个式子,就会得到两条反演公式: \[\max(S)=\sum_{T\subseteq S}(
阅读全文
摘要:我们知道,FFT 和 NTT 可以用来解决下面这种问题: \[c_k=\sum_{i+j=k}a_ib_j \]不过,这并不是卷积的全部形态,比如下面这种: \[c_k=\sum_{i*j=k}a_ib_j \]其中 \(*\) 代表一种位运算。 面对这种位运算类型的卷积,我们也有别样的方法,那就是
阅读全文
摘要:在这篇题解中,我会将各个部分的证明分成不同的推导过程,以达到逐一击破的效果。 引理 1:\(f(n)=2f(n-1)+f(n-2)\) 我的证明挺繁琐的,过程如下: \[(1+\sqrt 2)^{n-2}=e(n-2)+f(n-2)\sqrt 2 \]\[(1+\sqrt 2)^{n-1}=e(n-
阅读全文
摘要:我能说什么!抽象了这! 看到 \(n\le 10\) 的黑题顿感大事不妙。 我们考虑设 \(f(i)\) 表示将 \(n\) 个点划分为至少 \(i\) 个连通块时的方案数。我们可以暴力枚举每个点在哪个连通块里。划分方案是 \(Bell(n)\le 21147\) 的。 显然的,相同块内暂时忽略,不
阅读全文
摘要:发现难以维护差值,于是令 \(K=\frac{n+k}2\),这样就把问题转化为了“糖果”比“药片”大的组数为 \(K\) 的情况有多少种。 设 \(dp_{i,j}\) 表示我们用前 \(i\) 个“糖果”和“药片”配对,至少有 \(j\) 组“糖果”比“药片”大,有多少种情况;\(c_i\) 表
阅读全文
摘要:我们先假设同种糖间存在差异。 设 \(f_{i,j}\) 表示前 \(i\) 种糖至少有 \(j\) 人拿到的糖和原来一样,\(c_i\) 表示拿第 \(i\) 种糖的人的个数,则有: \[f_{i,j}=\sum_{k=0}^{\min(j,c_i)}f_{i-1,j-k}\binom{c_i}k
阅读全文
摘要:显然有一个 \(dp\) 思路。设 \(f_{i,j}\) 表示现在修了 \(i\) 栋楼,从第一栋楼外侧能看到 \(j\) 栋楼的方案数,显然有: \[f_{i,j}=\begin{cases}[i=0](j=0)\\f_{i-1,j-1}+(i-1)f_{i-1,j}(j\ne 0)\end{c
阅读全文
摘要:考虑计算一个点的贡献,最后 \(\times n\) 即为所求。 显然一个点的贡献为 \(\sum\limits_{i=0}^{n-1}\binom{n-1}ii^k2^{\frac{(n-1)(n-2)}2}\),则有: \[\sum_{i=0}^{n-1}\binom{n-1}ii^k2^{\f
阅读全文
摘要:为什么又是佳媛姐姐啊啊啊! 斯特林数在这道题中不好处理,直接拆开: \[f(n)=\sum_{i=0}^n\sum_{j=0}^i\begin{Bmatrix}i\\j\end{Bmatrix}2^jj! \]\[=\sum_{j=0}^n2^jj!\sum_{i=0}^n\sum_{k=0}^j\
阅读全文
摘要:老师发福利,放了两道一毛一样的题。 考虑无视战术,直接化简: \[\sum_{v=1}^ndis(u,v)^k=\sum_{v=1}^n\sum_{i=0}^k\begin{Bmatrix}k\\i\end{Bmatrix}dis(u,v)^{\underline i} \]\[=\sum_{i=0
阅读全文
摘要:后面有一只大大的组合数,考虑下降幂干过去。\(x^k\) 并不好使,这边考虑转化 \(f(x)=\sum a_ix^i=\sum b_ix^{\underline i}\)。 \[\sum_{k=0}^nf(k)x^k\binom nk=\sum_{k=0}^nx^k\sum_{i=0}^mb_ik
阅读全文
摘要:下降幂 注:这里其实还有上升幂。 定义 下降幂:\(x^{\underline{k}}=\prod\limits_{i=x-k+1}^xi=\frac{x!}{(x-k)!}\) 上升幂:\(x^{\overline{k}}=\prod\limits_{i=x}^{x+k-1}i=\frac{(x+
阅读全文
摘要:第一眼肯定想到容斥。设 \(G(k)\) 表示至少有 \(k\) 种颜色符合要求,\(F(k)\) 表示恰好有 \(k\) 种颜色符合要求。显然 \(k\) 的上界 \(t=\min(m,\lfloor\frac ns\rfloor)\),那么就有: \[G(k)=C_{m}^{k}(k!\prod
阅读全文
摘要:乘法并不容易用 FFT 或 NTT 维护,考虑在模意义下化乘为加。 化乘为加主要有两种方法:\(\log\) 和 \(\gamma\)(指标),由于在取模意义下,所以使用后者。 那剩下的部分就是快速幂,用 NTT 加速即可。时间复杂度 \(O(m\log m\log n)\)。 #include<b
阅读全文
摘要:首先正难则反,想到答案即为满足第一条要求的回文子序列数量,减去回文子串数量。回文子串数量 \(hash+\) 二分即可,考虑前半部分。 假如我们将一个回文子序列一层层剥开,就会发现它其实是由多个相同的字母对拼成的。那么容易想到把字母 \(a\) 和字母 \(b\) 的贡献分开计算。那第一条要求就可以
阅读全文
摘要:《关于贫穷的樵夫拥有 40000 把斧头这件事》。 相当于是多项式乘法,但是得带容斥,具体自己看代码吧。 #include<bits/stdc++.h> using namespace std; const int N=3e5+5; const long double pi=acos(-1); na
阅读全文
摘要:这题分三步:葺网(期望)、淀粉质(点分治)、蓉翅(容斥),再佐以芬芳团(FFT),一道巨难无比的 luogu 黑题就诞生了。 期望 先考虑在淀粉树上,\(i\) 点在 \(j\) 点的子树里的概率。实际上这个问题的每种情况相当于是 \(n\) 个点的各种排列方式。这也就相当于,我们在选择 \(j\)
阅读全文
摘要:容易发现: \[E_i=\sum_{j=1}^{i-1}\frac{q_j}{(i-j)^2}-\sum_{j=i+1}^n\frac{q_j}{(i-j)^2} \]不妨设 \(a_i=q_i,b_i=\dfrac 1{i^2}\): \[E_i=\sum_{j=1}^{i-1}a_jb_{i-j
阅读全文
摘要:看名字,然后准备转化为多项式乘法。 \[c_k=\sum_{i=0}^{n-k-1}a_{i+k}b_i \]将 \(a\) 反转,得: \[c_k=\sum_{i=0}^{n-k-1}a_{n-i-k-1}b_i \]这已经是多项式乘法的格式了,直接多项式乘法,最后对函数 \(c\) 的 \(0\
阅读全文
摘要:注:由于发现 FWT 解决的问题和 FFT,NTT 差别有点大,加之 FMT 的存在,本文就只解决 FFT 和 NTT,剩下两个放在别的算法总结里讲。 多项式一向是算法竞赛中相当博大精深的东西,作为一个蒟蒻,我将会以最大的努力完成这篇记录,以防自己以后看不懂qwq。 FFT(快速傅里叶变换) FFT
阅读全文
摘要:学原根发现拔山盖世算法忘光了,干脆一块儿写了吧。 \(BSGS\) 算法 \(BSGS\) 算法,又名拔山盖世算法、北上广深算法。他解决的问题如下: 求解最小的可行的 \(k\),满足 \(a^k\equiv b(\bmod p)\),其中保证 \(\gcd(a,p)=1\)。 容易想到暴力枚举,时
阅读全文
摘要:个人感觉各方面难度高于《在美妙的数学王国中畅游》,也不知道是不是求导的关系,这题 \(luogu\) 难度评级还更低。不过感觉这题作完对 \(LCT\) 理解更顺畅了。 前四个操作简单,关键在第五人格操作。 注意力惊人的注意到我们无法像普通 \(Splay\) 一样,直接对 \(LCT\) 中的 \
阅读全文
摘要:事实证明物竞笔记是个好东西,可惜没带,不然还能谎称自己会一点求导和微积分。 顺便在这里把比较经典的一些关于求导的东西记录一下: 常用函数求导: \(C'=0,(x^n)'=nx^{n-1},(\log_ax)'=\frac 1{x\ln a}\) \((\ln x)'=\frac 1x,(a^x)'
阅读全文
摘要:\(LCT\) 动态维护树上路径最值,典中典了。 时间复杂度 \(O(n\log n)\)。 #include<bits/stdc++.h> #define fa(x) lct[x].fa #define fl(x) lct[x].fl #define mx(x) lct[x].mx #define
阅读全文
摘要:名字感觉挺奇怪的。 考虑离线算法。首先答案就是用 \(n\) 减去连完边后的生成树森林边数。生成树当然就可以用 \(lct\) 求解了。我是不会告诉你这个时候我已经开始想回滚莫队了的。 考虑当我们倒序加入 \([l,r]\) 中的边时,哪些边会产生贡献。我们考虑假如我们新加入一条边,与原先的生成树形
阅读全文
摘要:最大值最小的路径肯定在最小生成树上,考虑用 \(LCT\) 维护最小生成树,只需要维护长度最长的边即可实现。由于 \(LCT\) 维护最小生成树不支持删边,所以采用倒序加边的方式处理。 时间复杂度 \(O(n\log n)\)。 #include<bits/stdc++.h> #define fa(
阅读全文
摘要:加边删边 \(LCT\),标记下放同 \(luogu\) 线段树 \(2\) 一题。 时间复杂度 \(O(n\log n)\),第一次交的时候我维护 \(sum\) 不维护 \(sz\ WA\) 完了。 #include<bits/stdc++.h> #define int long long #d
阅读全文
摘要:一眼树链剖分或 \(LCT\),由于在学后者所以就写了。 取反操作相当于把 \(min,max\) 取反后交换,所以要维护 \(min,max,val\)。 时间复杂度 \(O(m\log n)\)。 #include<bits/stdc++.h> #define fa(x) lct[x].fa #
阅读全文
摘要:似乎所有的线段树分治题都能被 \(LCT\) 平替掉? 一眼动态树,直接 \(LCT\)。 Connect x y 操作用 \(link(x,y)\) 实现,Destroy x y 操作用 \(cut(x,y)\) 实现,Query x y 操作用 \([find(x)=find(y)]\) 实现。
阅读全文
摘要:首先,\(LCT\) 一般指疏松结缔组织。 疏松结缔组织是指一种柔软而富有弹性的结缔组织。主要填充在各器官或组织间的间隙中,如剥制动物标本时,将皮肤拉开,就可见到薄而透明的疏松结缔组织。 对不起,刚才生物同志走错片场了。 \(LCT(Link\ Cut\ Tree)\),是一种可以解决动态树问题的数
阅读全文
摘要:啊啊啊啊啊啊啊啊啊啊啊我终于改完啦啊啊啊啊啊啊啊。 因为没有在最开始的时候将所有点设置为已经重构的,所以直接 \(R15-R70\) 间卡了两三天。 似乎也是我第一次大规模使用指针了。 这道题假如只有一次询问,就是一道简单淀粉质,直接在根节点建立平衡树,记录 \(r_x-dis(x,rt)\),然后
阅读全文