对于正整数 $a, b, x$($a\ge b$)$ x \ge \frac{a}{b} \iff x \ge \lceil \frac{a}{b} \rceil $
对于正整数 $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(A\cup B) = \max[m_1(A), m_1(B)]$
$m_2(A\cup 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$ 下同余。证毕。
从 $n$ 从个整数 $a_1, a_2, \dots, a_n$ 中取一个长为 $m$ 的连续子段。当 $n - m + 1 \ge m$ 时,必存在一个长为 $m$ 的子段满足其和能被 $m$ 整除。
证明:长为 $m$ 的子段有:$(0, m), (1, m+1), \dots, (n-m, n)$ 共 $n-m + 1$ 个,根据上面证明的定理,当 $n-m +1 \ge m$ 时,必能找出满足要求的子段。证毕。
狄利克雷卷积的一个例子
2016 年集训队论文《积性函数求和的几种方法》by 任之洲 中的一个例子:
$$\sigma_0(n^2) = \sum_{d\mid n} 2^{\omega(d)} $$
其中 $\omega(n)$ 表示 $n$ 的不同质因子个数。
证明:设 $x|n^2$ 且 $x\ge 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}$,则 $d\mid 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(\log\log x)$.
$f(x) \ge k \iff x \bmod 2^k = 0$
(来自 hihoCoder #1762)
$a, b$ 是两个小于 $10^n$ 的非负整数且 $a \ne b$ 。将 $a, b$ 表为 $n$ 位 10 进制。若 $a, b$ 从左往右直到权重为 $10^k$ 的数位上的数字都相等,但权重为 $10^{k-1}$ 的数位上的数字不相等,试估计 $|a-b|$ 的范围。
\[ 1\le |a-b| = |a\bmod 10^k - b\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$ 个不同的人的方案数为 $\binom{n+m-1}{m-1} = \binom{n+m-1}{n}$ (隔板法)
若正整数序列 $d_1, d_2, \dots, d_n$ 满足 $\sum_{1\le i\le 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 \in\mathbb R\le 1$ 。将此二元组任意排列,对于排列 $P\colon 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 = \prod\limits_{1\le j\le 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_{v\in V} N_v
\]
(来自 HourRank 27,Challenge 3)
$\forall a, b\in\mathbb R$,有
\[
|a+b| + |a-b| = 2\max(|a|, |b|)
\]
证明
- $a,b$ 同号($0$ 可以认为是正的,也可以认为是负的,下同),则
\begin{align*}
|a+b| &= |a| + |b| = \max(|a| + |b|) + \min(|a| + |b|) \\
|a - b| &= \max(|a|, |b|) - \min(|a|, |b|) \\
|a+b| + |a-b| &= 2\max(|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| = 2\max(|a|, |b|)
\]
这个结论的用法。一般是反过来用,即用
\begin{equation*}
\max(|a|,|b|) = \frac12 (|a+b| + |a - b|)
\end{equation*}
根据需要,将形如 $\max(|a|, |b|)$ 的表达式中的 $\max$ 算符去掉,方便进一步的处理。
由于 $|a| + |b| = \max(|a|, |b|) + \min(|a|, |b|)$,我们还有
\begin{align*}
\min(|a|,|b|) &= |a| + |b| - \max(|a|, |b|) \\
&= |a| + |b| - \frac12 (|a+b| + |a - b|)
\end{align*}
(来自 CF 959E)
对于 $x\in \mathbb Z^+$,用 $\mathrm{lsb}(x)$ 表示 $x$ 的二进制表示中最低位的 1(least significant bit)。
$\forall a, b\in\mathbb Z^+, a\ne b$,有
\[
a \oplus b \ge \min(\mathrm{lsb}(a), \mathrm{lsb}(b))
\]
其中 $\oplus$ 表示异或。
将 $0$ 看作 $2^\infty$,我们可以将上述结论推广到 $\mathbb Z^*$ 。
(来自 CF 959E)
求最小生成树的另一种算法 Boruvka's algo.
适用于边权两两不同图。(这一点存疑)