caterpillar tree. 毛毛虫树。
Learned from ARC103E Tr/ee.
满足下列条件的序列有多少个?
- 序列长为 $m$,
- $1 le a_1 le a_2 le dots le a_m le n$,
- $ a_i in mathbb{Z}$。
分析:
$1 le a_1 le a_2 le dots le a_m le n$ 等价于 $ 1 le a_1 < a_2 + 1 < a_3 + 2 < dots < a_m + m - 1 le n + m - 1$,因此答案为 $inom{n + m - 1}{m}$。
集合 $ [n] := {1, 2, dots, n}$ 的子集的和可以取到从 $0$ 到 $(n+1)n / 2$ 之间的每一个整数。这个结论用归纳法很容易证明。此外,还有一个构造性证明值得一提。对于 $[n]$ 的任意非空子集 $S$ 且 $S e [n]$,设其中元素之和为 $s$,可以从集合 $S$ 构造集合 $S'$ 且 $S'$ 中的元素之和为 $s + 1$,若存在 $ i in S$ 但 $i + 1 otin S$,以 $i + 1$ 替代 $i$ 即可,否则必有 $S = {k, k + 1, dots, n}$ 且 $k e 1$,此时把 $1$ 加进 $S$ 即可。
平面上有 $N$ 个点,任意三点不共线。任取其中 $K$($K ge 3$)个点;对于平面上一点 $p$(点 $p$ 不一定是给定的 $N$ 个点之一,可以是任意一点),存在以这 $K$ 个点为顶点的 $K$ 边形 $P_K$ 使得点 $p$ 在 $P_K$ 内部当且仅当点 $p$ 在这 $K$ 个点的凸包内部。这里所说的点在多边形内部是严格的,不包括点在多边形边界上的情形。
设 $n$ 是正整数。$frac{n(n-1)}{2}$ 模 $n$ 的余数,当 $n$ 为奇数时等于 $0$,当 $n$ 为偶数时等于 $n/2$。
$k$ 个相同的球放入 $n$ 个有编号的盒子里($k le n$),每个盒子至多放一个球;方案数是 $inom{n}{k}$。
$k$ 个相同的球放入 $n$ 个有编号的盒子里的方案数 $inom{k + n - 1}{k}$。
在无向图的连通性问题(割点、桥、边的双连通分量)中,low 值也可以用节点的深度来定义。
对于正整数 $a, b, x$($age b$)$ x ge frac{a}{b} iff x ge lceil frac{a}{b} ceil $
对于正整数 $a$, $b$, $c$ 有 $gcd(a,b) = c iff gcd(a/c, b/c) = 1$,$lcm(a,b) = c iff gcd(c/a, c/b) = 1$
给定一个长为 $n$ 的数组,数组元素各不相同。如何求区间次大值?
设有限集合 $A, B$ 是严格全序集 $U$ 的子集,设 $m_1(A), m_2(A)$ 分别是 $A$ 中的最大值和次大值。若 $A$ 为空集,则令 $m_1(A) = m_2(A) = -infty$;若 $A$ 只含一个元素,则令 $m_2(A) = -infty$ 。
我们有
$m_1(Acup B) = max[m_1(A), m_1(B)]$
$m_2(Acup B) = max{min[m_1(A), m_1(B)], max[m_2(A), m_2(B)]}$
从 $m$ 个整数 $a_1, a_2, dots, a_m$ 中一定能选出若干个数(至少选一个数,同一个下标至多选一次),使得这些数的和能被 $m$ 整除。
证明:令 $s_i$ 表示前 $i$ 项之和,若干 $s_i$ 中有能被 $m$ 整除者,则结论成立;否则 $s_i$ 模 $m$ 只能取 $1, 2, dots, m-1$,于是根据鸽笼原理,这 $m$ 个数中必有两个在模 $m$ 下同余。证毕。
狄利克雷卷积的一个例子
2016 年集训队论文《积性函数求和的几种方法》by 任之洲 中的一个例子:
$$sigma_0(n^2) = sum_{dmid n} 2^{omega(d)} $$
其中 $omega(n)$ 表示 $n$ 的不同质因子个数。
证明:设 $x|n^2$ 且 $xge 2$ 则 $x$ 可表为 $x= p_1 ^{k_1} p_2^{k_2} dots p_t^{k_t} $,其中 $p_1 < p_2 < dots < p_t$ 是质数,$k_i ge 1$ 。令 $y$ 为 $x$ 的次数为奇数的质因子之积,并令 $ d = sqrt{xy}$,则 $dmid n$ 。不难看出,$x$ 与二元组 $(d, y)$ 一一对应,这样就完成了证明。
(来自 ABC 100 C editorial)
For a positive integer $x$, let $f(x)$ be the number of times that $x$ can be divided by $2$, if you use binary-search by the value of $f(x)$, you can determine $f(x)$ with complexity $O(loglog x)$.
$f(x) ge k iff x mod 2^k = 0$
(来自 hihoCoder #1762)
$a, b$ 是两个小于 $10^n$ 的非负整数且 $a
e b$ 。将 $a, b$ 表为 $n$ 位 10 进制。若 $a, b$ 从左往右直到权重为 $10^k$ 的数位上的数字都相等,但权重为 $10^{k-1}$ 的数位上的数字不相等,试估计 $|a-b|$ 的范围。
[ 1le |a-b| = |amod 10^k - bmod 10^k | le 10^{k} -1 ]
进一步,在 $a$ 是常数,$b$ 是变数且 $b$ 各个数位上的数字各不相同的条件下(此时必有 $n le 10$),试估计 $|a-b|$ 的范围
形如
[ sum_{k=1}^{infty} frac{k}{2^k} ]
的求和,怎样考虑比较简便?
这个求和可以用中学里介绍的「错位相减」技巧来处理。
令
[ S = sum_{k=1}^{infty} frac{k}{2^k} ]
则
[ 2S = sum_{k=1}^{infty} frac{k}{2^{k-1}} = 1 + sum_{k=1}^{infty} frac{k+1}{2^k} ]
两式相减得
[ S = 1 + sum_{k=1}^{infty} frac{1}{2^k} = 2]
hihoCoder 挑战赛 33 A 题 打怪
一个计数问题,我的思路有点麻烦,不是很简洁,题解 PPT 上的思路更好,需要学习一个,但是我懒得写一篇博客来总结了。
「求和型计数问题」的一个常用的思路就是考虑每个元素的贡献。
又想起 Matthew99 的 motto 「Think twice, code once.」
组合计数问题汇总
- 将 $n$ 个相同的物品分给 $m$ 个不同的人的方案数为 $inom{n+m-1}{m-1} = inom{n+m-1}{n}$ (隔板法)
若正整数序列 $d_1, d_2, dots, d_n$ 满足 $sum_{1le ile n} d_i = 2(n-1)$,则必然存在一棵 $n$ 阶有标号的树 $T$,使得 $T$ 的度数序列等于 $d$ 。
给定一个 $n$ 个点 $m$ 条边的随机有向图,无重边,无自环。每条边有一个权值 $p$($0 < p le 1$)表示这条边存在的概率。
现欲从点 $u$ 走到点 $v$,求最优策略下的成功概率。
(来自 WF 18 Problem A)
给定 $k$ 个二元组 $(a_1, b_1), dots, (a_k,b_k)$,$0 le a_i, b_i inmathbb Rle 1$ 。将此二元组任意排列,对于排列 $Pcolon i_1, i_2, dots, i_k$,定义
[
f(P) = a_{i_1}b_{i_1} + (1-a_{i_1})a_{i_2}b_{i_2} + (1-a_{i_1})(1-a_{i_2})a_{i_3}b_{i_3} +dots \ + (1-a_{i_1})(1-a_{i_2})dots(1-a_{i_{k-1}})a_{i_k}b_{i_k}
]
求函数 $f(P)$ 的最大值。
将 $k$ 个二元组按 $b$ 从大到小排列即可。
证明:令 $S_n = prodlimits_{1le jle n} 1-a_{i_j}$,$S_n$ 单调不增。故按 $b$ 从大到小排列可使 $f$ 取最大值。(这样证明似乎是有问题的)
严格的证明:
考虑“交换相邻两个二元组,函数值不会更大”这个(最优解的)必要条件。
(注:这个问题可从概率角度考虑,结论比较显然:P。我似乎倾向于故弄玄虚?)
(来自 CF 964D)
一个关于图论的小结论:
在一个奇数阶的树中,必然存在一个点 $u$ 使得与 $u$ 相连的所有子树都是奇数阶的。
(注:The number of vertices of a graph $G$ is its order, written as $|G|$)
证明:用构造法证明。考虑有根树。任选一个点 $v$ 作为根。若 $v$ 的子树(「$v$ 的子树」指的是与 $v$ 直接相连的子树)中有偶数阶的,记做 $u$;重新以 $u$ 为根,重复上述过程。不难看出,每次根发生变化,与根直接相连的偶数阶子树的最大阶数严格递减。
在知乎上看到的一个问题:
将 $n$ 根绳子的 $2n$ 个端点两两系在一起,最后形成一个环的概率是多少?
首先考虑 $2n$ 个物品的两两分组的方案数,为
[
frac{(2n)!}{2^n n!} = (2n-1)!!
]
将 $2n$ 个物品两两分组的所有方案构成了样本空间,并且其中所有样本点是等可能的。
现在考虑这些方案中有多少个能形成环,我们考虑 $n$ 个物品的圆排列,方案数为 $(n-1)!$ 。
确定 $n$ 根绳子的排列后,还需确定每根绳子的取向,方案数为 $2^n(n-1)!$ 。
另外还需要考虑圆排列的正向与反向对应着同一个样本点,故形成环的方案数为 $2^{n-1}(n-1)!$ 。
形成环的概率为
[
frac{2^{n-1}(n-1)!}{(2n-1)!!}
]
求一棵带编号的树的连通子图的数目。
考虑以 $r$ 为根的有根树。不难求出包含点 $u$ 且全由子树 $u$ 中的点构成的连通子图的数目 $N_u$。
对于任意一个连通子图,考虑其中深度最小的点 $v$,这个连通子图在且只在 $N_v$ 中被统计了一次。
所以总的连通子图的数目为
[
sum_{vin V} N_v
]
(来自 HourRank 27,Challenge 3)
$forall a, binmathbb R$,有
[
|a+b| + |a-b| = 2max(|a|, |b|)
]
证明
- $a,b$ 同号($0$ 可以认为是正的,也可以认为是负的,下同),则
egin{align*}
|a+b| &= |a| + |b| = max(|a| + |b|) + min(|a| + |b|) \
|a - b| &= max(|a|, |b|) - min(|a|, |b|) \
|a+b| + |a-b| &= 2max(|a|, |b|)
end{align*} - $a,b$ 异号,则
[
|a+b| = max(|a|, |b|) - min(|a|, |b|) \
|a - b| = |a| + |b| = max(|a|, |b|) + min(|a|, |b|) \
|a+b| + |a-b| = 2max(|a|, |b|)
]
这个结论的用法。一般是反过来用,即用
egin{equation*}
max(|a|,|b|) = frac12 (|a+b| + |a - b|)
end{equation*}
根据需要,将形如 $max(|a|, |b|)$ 的表达式中的 $max$ 算符去掉,方便进一步的处理。
由于 $|a| + |b| = max(|a|, |b|) + min(|a|, |b|)$,我们还有
egin{align*}
min(|a|,|b|) &= |a| + |b| - max(|a|, |b|) \
&= |a| + |b| - frac12 (|a+b| + |a - b|)
end{align*}
(来自 CF 959E)
对于 $xin mathbb Z^+$,用 $mathrm{lsb}(x)$ 表示 $x$ 的二进制表示中最低位的 1(least significant bit)。
$forall a, binmathbb Z^+, a
e b$,有
[
a oplus b ge min(mathrm{lsb}(a), mathrm{lsb}(b))
]
其中 $oplus$ 表示异或。
将 $0$ 看作 $2^infty$,我们可以将上述结论推广到 $mathbb Z^*$ 。
(来自 CF 959E)
求最小生成树的另一种算法 Boruvka's algo.
适用于边权两两不同图。(这一点存疑)