zoukankan      html  css  js  c++  java
  • 知识汇总

    $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$,因此答案为 $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|)
    ]

    证明

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

  • 相关阅读:
    程序员高效学习
    红黑树(平衡操作详解)
    【设计模式】JDK源码中用到的设计模式
    pymysql.err.InternalError: (1205, 'Lock wait timeout exceeded; try restarting transaction')错误处理
    UPC:ABS
    洛谷:P1182:数列分段`Section II`
    python:数据库连接操作入门
    2018百度之星资格赛:1002:子串查询
    Educational Codeforces Round 48 (Rated for Div. 2)——A. Death Note ##
    python:pip命令使用
  • 原文地址:https://www.cnblogs.com/Patt/p/8708355.html
Copyright © 2011-2022 走看看