知识汇总

$\DeclareMathOperator{\lcm}{lcm}$

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$,因此答案为 \(\binom{n + m - 1}{m}\)


集合 $ [n] := \{1, 2, \dots, n\}$ 的子集的和可以取到从 \(0\)\((n+1)n / 2\) 之间的每一个整数。这个结论用归纳法很容易证明。此外,还有一个构造性证明值得一提。对于 \([n]\) 的任意非空子集 \(S\)\(S \ne [n]\),设其中元素之和为 \(s\),可以从集合 \(S\) 构造集合 \(S'\)\(S'\) 中的元素之和为 \(s + 1\),若存在 $ i \in S$ 但 \(i + 1 \notin S\),以 \(i + 1\) 替代 \(i\) 即可,否则必有 \(S = \\{k, k + 1, \dots, n\\}\)\(k \ne 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\)),每个盒子至多放一个球;方案数是 \(\binom{n}{k}\)
\(k\) 个相同的球放入 \(n\) 个有编号的盒子里的方案数 \(\binom{k + n - 1}{k}\)


在无向图的连通性问题(割点、桥、边的双连通分量)中,low 值也可以用节点的深度来定义。


对于正整数 \(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\) 下同余。证毕。


狄利克雷卷积的一个例子

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|)
\]

证明

  1. \(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
  2. \(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.
适用于边权两两不同图。(这一点存疑)

posted @ 2018-04-03 14:49  Pat  阅读(364)  评论(0编辑  收藏  举报