0628Zn

20260706

T1

一眼 EXCRT 板子,注意开 int128即可。

T2

对于每一个质因数,注意到 gcd 是对指数取 min,lcm 是对指数取 max,实际就是锁定了上下界,容斥计算合法方案数,即为指数在 \(\left[a_i,b_i\right]\) 范围内的方案数减去指数在 \(\left(a_i,b_i\right]\)\(\left[a_i,b_i\right)\) 范围内的方案数再加上指数在 \(\left(a_i,b_i\right)\) 范围内的方案数。

T3

推式子题。

根据给的递推式子 \(f(i,j)=f(i-1,j)+f(i-1,j-1)\),边界 \(i=0\)\(j=0\)\(f(i,j)=1\),可以设其生成函数 \(F(x,y)=\sum_{i=0}\sum_{j=0}f(i,j)x^iy^j\)

\[\begin{align*} F(x,y)&=\sum_{i=0}\sum_{j=0}f(i,j)x^iy^j\\&=\sum_{j=0}y^j+\sum_{i=1}\sum_{j=0}f(i,j)x^iy^j\\&=\sum_{j=0}y^j+\sum_{i=1}x^i(1+\sum_{j=1}f(i,j)y^j)\\&=\sum_{j=0}y^j+\sum_{i=1}x^i(1+\sum_{j=1}(f(i-1,j)+f(i-1,j-1))y^j)\\&=\sum_{j=0}y^j+\sum_{i=0}x^{i+1}(1+\sum_{j=1}f(i,j)y^j+\sum_{j=1}f(i,j-1)y^j)\\&=\sum_{j=0}y^j+x\sum_{i=0}x^i\sum_{j=0}f(i,j)y^j+x\sum_{i=0}x^i\sum_{j=0}f(i,j)y^{j+1}\\&=\sum_{j=0}y^j+xF(x,y)+xyF(x,y) \end{align*}\]

\[\begin{align*} (1-x-xy)F(x,y)&=\sum_{j=0}y^j \end{align*}\]

\[\begin{align*} F(x,y)&=\sum_{j=0}y^j\frac{1}{1-x-xy}\\&=\sum_{j=0}y^j\frac{1}{1-(1+y)x}\\&=\sum_{j=0}y^j\sum_{i=0}(1+y)^ix^i\\&=\sum_{j=0}y^j\sum_{i=0}x^i\sum_{k=0}^i\binom{i}{k}y^k\\&=\sum_{i=0}x^i\sum_{j=0}\sum_{k=0}\binom{i}{k}y^{j+k}\\&=\sum_{i=0}\sum_{j=0}x^iy^j\sum_{k=0}^j\binom{i}{k} \end{align*}\]

所以得到 \(f(i,j)=\sum_{k=0}^j\binom{i}{k}\),所求的式子就是:

\[\begin{align*} \sum_{i=0}^n\sum_{k=0}^m\binom{i}{k}&=\sum_{k=0}^m\left(\binom{0}{k+1}+\sum_{i=0}^n\binom{i}{k}-\binom{0}{k+1}\right)\\&=\sum_{k=0}^m\left(\binom{1}{k+1}+\sum_{i=1}^n\binom{i}{k}\right)\\&=\sum_{k=0}^m\binom{n+1}{k+1}\\&=\sum_{k=0}^{m+1}\binom{n+1}{k}-1 \end{align*}\]

那么这个式子怎么计算呢?因为我们要的实际上是模 \(p\) 意义下的结果,所以设 \(g(a,b)=\sum_{i=0}^b\binom{a}{i}\)

\[\begin{align*} g(a,b)&=\sum_{i=0}^b\binom{a}{i}\\&=\sum_{i=0}^{p\left\lfloor\frac{b}{p}\right\rfloor-1}\binom{a}{i}+\sum_{i=p\left\lfloor\frac{b}{p}\right\rfloor}^b\binom{a}{i}\\&=\sum_{i=0}^{p\left\lfloor\frac{b}{p}\right\rfloor-1}\binom{\left\lfloor\frac{a}{p}\right\rfloor}{\left\lfloor\frac{i}{p}\right\rfloor}\binom{a\mod p}{i\mod p}+\sum_{i=p\left\lfloor\frac{b}{p}\right\rfloor}^b\binom{a}{i}\\&=\sum_{k=0}^{\left\lfloor\frac{b}{p}\right\rfloor-1}\sum_{t=0}^{p-1}\binom{\left\lfloor\frac{a}{p}\right\rfloor}{k}\binom{a\mod p}{t}+\sum_{i=p\left\lfloor\frac{b}{p}\right\rfloor}^b\binom{a}{i}\\&=\sum_{k=0}^{\left\lfloor\frac{b}{p}\right\rfloor-1}\binom{\left\lfloor\frac{a}{p}\right\rfloor}{k}\sum_{t=0}^{p-1}\binom{a\mod p}{t}+\sum_{i=p\left\lfloor\frac{b}{p}\right\rfloor}^b\binom{a}{i}\\&=g(\left\lfloor\frac{a}{p}\right\rfloor,\left\lfloor\frac{b}{p}\right\rfloor-1)\sum_{t=0}^{p-1}\binom{a\mod p}{t}+\sum_{i=p\left\lfloor\frac{b}{p}\right\rfloor}^b\binom{a}{i} \end{align*}\]

递归求解即可,边界\(b<0\) 时返回 \(0\),最终答案为 \(g(n+1,m+1)-1\)

T4

每个点之间互不影响,显然可以从大到小枚举,已经枚举过的就是比它大的,考虑计算这一堆点到当前点的距离和即可。

树上距离 \(dis(u,v)=dep_u+dep_v-2dep_{lca}\),前两项很好统计,但 \(lca\) 的深度和该如何计算呢?考虑 lca 的定义为最近公共祖先,那么它的所有祖先一定也是 \(u\)\(v\) 的公共祖先,诶那一个数的祖先数量加上它自己不就是它的深度吗?也就是说,树上两点的最近公共祖先的深度就是这两点的公共祖先数量。那这个数量该怎么求呢?我们可以对其中一个点到根节点路径上的所有点打上标记,再统计另一个点到根节点路径上的所有点的标记,既能被打上标记又能被统计到的点就是公共祖先了。多点到一个点也一样,先把这些点到根节点路径上的所有点打上标记,\(cnt_u\) 表示有多少个点以 \(u\) 为祖先,再统计点到根节点路径上的所有点的 \(cnt\) 和即可。可以用树剖线段树做,或者像 @ACehomoxue 一样用常数更小的树状数组写法。

posted on 2026-07-07 22:03  琬安与璃茗  阅读(3)  评论(0)    收藏  举报