普及数数(敏捷开发之alpha版本)

组合恒等式:

\[\binom{n}{m} = \binom{n}{n-m} \tag{1} \]

\[\binom{n}{m} \binom{m}{k} = \binom{n}{k} \binom{n-k}{m-k} \tag{2} \]

\[\sum_{i=0}^n \binom{r}{i} \binom{s}{n-i} = \binom{r+s}{n} \tag{范德蒙德卷积恒等式} \]

\[\sum_{i=0}^n \binom{i}{m} = \binom{n+1}{m+1} \tag{上指标求和一} \]

\[\sum_{i=0}^m \binom{n+i}{n} = \binom{n+m+1}{m} \tag{上指标求和二} \]

\[\sum_{k=0}^m \binom{n+k}{k} = \binom{n+m+1}{m} \tag{斜求和} \]

\[\sum_{i=0}^n \left(\begin{matrix} n \\ i \end{matrix}\right) = 2^n \tag{整行求和} \]

\[\sum_{i=0}^n \binom{n}{i}[2\mid i] = \sum_{i=0}^n \binom{n}{i}[2\nmid i] = 2^{n-1} \tag{间隔求和, 要求 $n > 0$} \]

\[\sum_{i=0}^n \binom{n}{i} (-1)^i = \sum_{i=0}^n \binom{n}{i} (-1)^{i+1} = [n=0] \tag{间隔共轭求和, 是二项式反演的基础} \]

选几个组合意义不明显又不容易归纳的证明一下:

对上指标求和一的证明:
\([1,n+1]\) 中选 \(m+1\) 个数, 将方案按照最大的数分类, 即可得到此式子。
对上指标求和二的证明:

\[\sum_{i=0}^m \left(\begin{matrix} n+i \\ n \end{matrix}\right) \]

\[\sum_{i=0}^{n+m} \left(\begin{matrix} i \\ n \end{matrix}\right) - \sum_{i=0}^{n-1} \left(\begin{matrix} i \\ n \end{matrix}\right) \]

\[=\left(\begin{matrix} n+m+1 \\ n+1 \end{matrix}\right) - \left(\begin{matrix} n \\ n+1 \end{matrix}\right) \]

\[=\left(\begin{matrix} n+m+1 \\ m \end{matrix}\right) \]

这东西好像还有个因吹斯挺的组合意义, 但我困了, 今天上午再说(2020.8.6 0:12)


T1
手玩下可以发现, 最终局面之与各 \(a_i\) 的数量有关, 与它们的排列顺序无关。
那么, 如果存在一个 \(i\) 使得 \(\ge i\)\(a_k\) 的总数超过 \(n-i+1\), 就不合法。
通过 \(DP\) 统计方案。
\(f[i][j]\) 表示 \(\ge i\) 的编号总共又放了 \(j\) 人, 答案就是 \(f[1][n-m]\)
转移方程如下:

\[f[i][j] = \sum \limits_{k = 0}^j f[i + 1][j - k] \times C_j^k \Big(0 \le j \le n - i + 1 - (不归你安排的 \ge i 的个数) \Big) \]

T2
第一步处理是容斥。

\[ans = \sum_{i=0}^n \sum_{j=0}^n [i+j>0] (-1)^{i+j-1} C_n^iC_n^j f(i,j) \]

其中, \(f(i,j)\) 表示至少有 \(i\)\(j\) 列 同色的方案数。
1.当 \(i>0\)\(j>0\) 时, 这几行几列都是同色的, 此时方案数为 \(3 * 3^{(n-i)*(n-j)}\)
2.若 \(i=0\) 异或 \(j=0\), 方案数为 \(3^{i+j} * 3^{n*(n-i-j)}\)。(\(i+j\) 就是 \(i\) 异或 \(j\)
后者计算方便且适于时限, 现在处理前者。

\[pre = \sum_{i=1}^n \sum_{j=1}^n (-1)^{i+j-1} C_n^i C_n^j 3*3^{(n-i)*(n-j)} \]

\(p = n-i\)\(q = n-j\)

\[pre = 3\sum_{p=0}^{n-1} \sum_{q=0}^{n-1} (-1)^{2n-p-q-1} C_n^p C_n^q 3^{pq} \]

由于 \(2n\) 是偶数, 所以 \(2n-p-q-1\)\(2n - (2n-p-q-1)\) 奇偶性相同, 故:

\[pre = 3\sum_{i=0}^{n-1} \sum_{j=0}^{n-1} (-1)^{i+j+1} C_n^i C_n^j 3^{ij} \]

\[= 3\sum_{i=0}^{n-1} C_n^i (-1)^{i+1} \sum_{j=0}^{n-1} C_n^j (-3^i)^j \]

\[= 3\sum_{i=0}^{n-1} C_n^i (-1)^{i+1} [(1-3^i)^n - (-3^i)^n] \]

这题就做完啦。

T3
T4
T5

经典问题:自然数幂之和

\(S_k(n) = \sum_{i=1}^n i^k\)
命题:\(S_k(n)\) 是关于 \(n\)\(k+1\) 次多项式。
证明:对 \(k\) 归纳。

  1. \(k = 0\)\(S_0(n) = n\),是关于 \(n\)\(1\) 次多项式。
  2. 考虑一个十分奇妙的构造:

    \[\sum_{i=1}^n [(i+1)^{d+1} - i^{d+1}] = \sum_{i=1}^n \sum_{j=0}^d \left(\begin{matrix}d+1\\j\end{matrix}\right) i^j \]

\[(n+1)^{d+1} - 1 = \sum_{j=0}^d \left(\begin{matrix}d+1\\j\end{matrix}\right) \sum_{i=1}^ni^j = \sum_{j=0}^d \left(\begin{matrix}d+1\\j\end{matrix}\right) S_j(n) \]

\[\left(\begin{matrix}d+1\\d\end{matrix}\right)S_d(n) = (n+1)^{d+1} - \sum_{j=0}^{d-1} \left(\begin{matrix}d+1\\j\end{matrix}\right) S_j(n) - 1 \]

最后这个式子就明显表明了:如果对于 \(\forall k\le d-1\)\(S_k(n)\) 是关于 \(n\)\(k+1\) 多项式, 那么 \(S_d(n)\) 就是关于 \(n\)\(d+1\) 次多项式。

对了, 依照上面的式子, 似乎得到了一个递推式:

\[S_d(n) = \frac{1}{d+1} \Big[ (n+1)^{d+1} - \sum_{j=0}^{d-1} \left(\begin{matrix}d+1\\j\end{matrix}\right) S_j(n) - 1 \Big] \]

拉格朗日插值

众所周知, \(k+1\) 个点值 \((x_{i\in[0,k]},y_i)\) 唯一决定一个 \(k\) 次多项式(这里多项式都是实系数的)。
根据拉格朗日插值, 这个多项式是:

\[F(x) = \sum_{i=0}^k y_i \prod_{i \neq j} \frac{x-x_j}{x_i-x_j} \]

证明:
只要对于 \(\forall i \in [0,k]\)\(F(x_i) = y_i\), 那么 \(F(x)\) 就是那个唯一的多项式。
依据这个思路, 将 \(x_p\) 代入 \(F(x)\)

\[F(x_p) = \sum_{i=0}^k y_i \prod_{i \neq j} \frac{x_p-x_j}{x_i-x_j} \]

\[= \sum_{i=0}^k y_i \prod_{i \neq j} \frac{x_p-x_j}{x_i-x_j} [i=p] + \sum_{i=0}^k y_i \prod_{i \neq j} \frac{x_p-x_j}{x_i-x_j} [i \neq p] \]

\[= y_p \prod_{p \neq j} \frac{x_p-x_j}{x_p-x_j} + \sum_{i=0}^k y_i \prod_{i \neq j} \frac{x_p-x_j}{x_i-x_j} [i \neq p] \]

\[= y_p + 0 \]

所以拉格朗日插值公式是正确的。

用拉插解 \(S_k(n)\)

由于 \(S_k(n)\)\(k+1\) 次多项式, 所以只要求出 \(k+2\) 个点值, 就可以拉插了。
\(x \in [0,k+1]\)\(k+2\) 个点值:
不赘述了, 很好设计算法, 有对模数的要求。


\[\begin{Bmatrix} n \\ m \end{Bmatrix} \]

\[\binom{n}{m} \]

\[\begin{bmatrix} n \\ m \end{bmatrix} \]

斯特林数与阶幂

第一类斯特林数 \(\begin{bmatrix} n \\ m \end{bmatrix}\) 表示有 \(m\) 个循环的 \(n\) 阶置换的数量。
递推式为 \(\begin{bmatrix} n \\ m \end{bmatrix} = \begin{bmatrix} n-1 \\ m-1 \end{bmatrix} + (n-1)\begin{bmatrix} n-1 \\ m \end{bmatrix}\)
第二类斯特林数 \(\begin{Bmatrix} n \\ m \end{Bmatrix}\) 表示将 \(n\) 阶集合划分成 \(m\) 个集合的方案数。
递推式为 \(\begin{Bmatrix} n \\ m \end{Bmatrix} = \begin{Bmatrix} n-1 \\ m-1 \end{Bmatrix} + m\begin{Bmatrix} n-1 \\ m \end{Bmatrix}\)
它们的边界条件都是 \(\begin{bmatrix} 0 \\ 0 \end{bmatrix} = \begin{Bmatrix} 0 \\ 0 \end{Bmatrix} = 1\)

下降幂 \(n^{\underline m} = n(n-1)(n-2)\cdots (n-m+1)\)
上升幂 \(n^{\overline m} = n(n+1)(n+2)\cdots (n+m-1)\)


定理1

\[n^m = \sum_{i=0}^m \begin{Bmatrix} m \\ i \end{Bmatrix} n^{\underline i} \tag{普通幂转下降幂} \]

证明:
通过组合意义考虑, \(n^m\) 表示将 \(m\) 个不同的球放到 \(n\) 个盒子里的方案数, 通过将这些方案按照 “有几个盒子非空” 分类, 得到:

\[n^m = \sum_{i=0}^m \binom{n}{i} \begin{Bmatrix} m \\ i \end{Bmatrix} i! = \sum_{i=0}^m \begin{Bmatrix} m \\ i \end{Bmatrix} n^{\underline i} \]

定理2

\[n^{\overline m} = \sum_{i=0}^m \begin{bmatrix} m \\ i \end{bmatrix} n^i \tag{上升幂转普通幂} \]

证明:
用归纳法证明比较优美。(合并的快感)

  1. \(m=1\) 时, 显然成立。

\[n^{\overline m} = (n+m-1) n^{\overline{m-1}} = (n+m-1) \sum_{i=0}^{m-1} \begin{bmatrix} m-1 \\ i \end{bmatrix} n^i \]

\[= \sum_{i=1}^{m} \begin{bmatrix} m-1 \\ i-1 \end{bmatrix} n^i + (m-1)\sum_{i=0}^{m-1} \begin{bmatrix} m-1 \\ i \end{bmatrix} n^i \]

再由于 \(\begin{bmatrix} n \\ -1 \end{bmatrix} = \begin{bmatrix} n \\ n+1 \end{bmatrix} = 0\) 之类的性质, 定理2 就得证了。

斯特林反演

啊这 \(\text{vfleaking}\) 的炫酷反演魔术确实是反演之鉴。

一个 xio 引理:

\[x^{\underline n} = (-1)^n (-x)^{\overline n}, \;\;\; x^{\overline n} = (-1)^n (-x)^{\underline n} \]

反演的关键

\[\sum_{k=m}^n (-1)^{n-k} \begin{bmatrix} n \\ k \end{bmatrix} \begin{Bmatrix} k \\ m \end{Bmatrix} = [m=n] \tag{1} \]

\[\sum_{k=m}^n (-1)^{n-k} \begin{Bmatrix} n \\ k \end{Bmatrix} \begin{bmatrix} k \\ m \end{bmatrix} = [m=n] \tag{2} \]

\((2)\) 的证明:

\[n^m = \sum_{i=0}^m \begin{Bmatrix} m \\ i \end{Bmatrix} n^{\underline i} = \sum_{i=0}^m \begin{Bmatrix} m \\ i \end{Bmatrix} (-1)^i (-n)^{\overline i} \]

\[\sum_{i=0}^m \begin{Bmatrix} m \\ i \end{Bmatrix} (-1)^i \sum_{j=0}^i \begin{bmatrix} i \\ j \end{bmatrix} (-n)^j = \sum_{j=0}^m n^j \sum_{i=j}^m \begin{Bmatrix} m \\ i \end{Bmatrix} \begin{bmatrix} i \\ j \end{bmatrix} (-1)^{i+j} \]

显然等式左右两边各次幂 \(n\) 的系数都应分别相等, 故

\[\sum_{i=j}^m \begin{Bmatrix} m \\ i \end{Bmatrix} \begin{bmatrix} i \\ j \end{bmatrix} (-1)^{i+j} = [j=m] \]

一些形式和等效表达式上的区别不需要在意, \((2)\) 就得证了。

\((1)\) 的证明:

\[(-1)^m (-n)^{\underline m} = n^{\overline m} = \sum_{i=0}^m \begin{bmatrix} m \\ i \end{bmatrix} n^i \]

\[(-n)^{\underline m} = \sum_{i=0}^m \begin{bmatrix} m \\ i \end{bmatrix} (-1)^{m-i} (-n)^i \]

\[n^{\underline m} = \sum_{i=0}^m \begin{bmatrix} m \\ i \end{bmatrix} (-1)^{m-i} n^i = \sum_{i=0}^m \begin{bmatrix} m \\ i \end{bmatrix} (-1)^{m-i} \sum_{j=0}^i \begin{Bmatrix} i \\ j \end{Bmatrix} n^{\underline j} \]

\[= \sum_{j=0}^m n^{\underline j} \sum_{i=j}^m \begin{bmatrix} m \\ i \end{bmatrix} \begin{Bmatrix} i \\ j \end{Bmatrix} (-1)^{m-i} \]

我猜下降幂多项式和普通多项式性质差不多, 所以 \((1)\) 就得证了 (大概)

斯特 rin 反演

\[f(n) = \sum_{k=0}^n \begin{Bmatrix} n \\ k \end{Bmatrix} g(k) \Leftarrow=\Rightarrow g(n) = \sum_{k=0}^n \begin{bmatrix} n \\ k \end{bmatrix} (-1)^{n-k} f(k) \]

证明:
一:从右推左
已知 \(g(n) = \sum_{k=0}^n \begin{bmatrix} n \\ k \end{bmatrix} (-1)^{n-k} f(k)\), 那么

\[g(n) = \sum_{m=0}^n [m=n] g(m) = \sum_{m=0}^n \sum_{k=m}^n (-1)^{n-k} \begin{bmatrix} n \\ k \end{bmatrix} \begin{Bmatrix} k \\ m \end{Bmatrix} g(m) = \sum_{k=0}^n \begin{bmatrix} n \\ k \end{bmatrix}(-1)^{n-k} \sum_{m=0}^k \begin{Bmatrix} k \\ m \end{Bmatrix} g(m) = \sum_{k=0}^n \begin{bmatrix} n \\ k \end{bmatrix} (-1)^{n-k} f(k) \]

推完啦!

二:从左推右
草我不会证, 按照上面的方法推出来是个很怪的形式, 日后我会寻找证明的方法。

斯特林数解 \(S_k(n)\)

\[S_k(n) = \frac{(n+1)^{\underline{k+1}}}{k+1} - \sum_{i=0}^{k-1}(-1)^{k-i} · \begin{bmatrix} k \\ i \end{bmatrix} · S_i(n) \]

证明:

\[n^m = \sum_{k=0}^m \begin{Bmatrix} m \\ k \end{Bmatrix} n^{\underline k} \Leftarrow=\Rightarrow n^{\underline m} = \sum_{k=0}^m \begin{bmatrix} m \\ k \end{bmatrix} (-1)^{m-k} n^k \]

\[n^m = n^{\underline m} - \sum_{k=0}^{m-1} \begin{bmatrix} m \\ k \end{bmatrix} (-1)^{m-k} n^k \]

\[S_m(n) = \sum_{i=1}^n i^m = \sum_{i=1}^n \begin{Bmatrix} i^{\underline m} - \sum_{k=0}^{m-1} \begin{bmatrix} m \\ k \end{bmatrix} (-1)^{m-k} i^k \end{Bmatrix} \]

然后就得证了。(关于 \(\sum_{k=0}^{n-1} k^{\underline m} = \frac{n^{\underline{m+1}}}{m+1}\) 这件事, 要用到有限微积分 owo, 具体数学应该是有介绍的)
算法不赘述了, 虽然慢, 但是对模数没有要求。


\[\left(\begin{matrix} n \\ m \end{matrix}\right) \]

虚假的容斥原理

\(A_i\) 为集合, \(U\) 为全集, \(\overline{A}\)\(A\) 关于 \(U\) 的补集。

\[\bigg|\bigcup_{i=1}^n A_i \bigg| = \sum_{k=1}^n(-1)^{k+1} \Bigg( \sum_{1\le i_1 < \cdots < i_k \le n} |A_{i_1} \cap \cdots \cap A_{i_k}| \Bigg) \tag{1} \]

\[\bigg|\bigcap_{i=1}^n A_i \bigg| = |U| - \bigg|\bigcup_{i=1}^n \overline{A_i} \bigg| \tag{2} \]

证明 \((1)\)
考虑一个处于 \(\bigcup_{i=1}^n A_i\) 中的元素 \(x\), 它属于 \(m\) 个集合 \(T_1, \cdots, T_m\), 那么它对于右边式子的贡献为:

\[|\{T_i\}| - |\{T_i \cap T_j | i<j\}| + \cdots + (-1)^{m+1}|\{ T_1 \cap \cdots \cap T_m \}| \]

\[= \left(\begin{matrix} m \\ 1 \end{matrix}\right) - \left(\begin{matrix} m \\ 2 \end{matrix}\right) + \cdots + (-1)^{m+1}\left(\begin{matrix} m \\ m \end{matrix}\right) \]

\[= \Bigg( -\left(\begin{matrix} m \\ 0 \end{matrix}\right) + \left(\begin{matrix} m \\ 1 \end{matrix}\right) - \left(\begin{matrix} m \\ 2 \end{matrix}\right) + \cdots + (-1)^{m+1}\left(\begin{matrix} m \\ m \end{matrix}\right) \Bigg) + \left(\begin{matrix} m \\ 0 \end{matrix}\right) \]

\[= [m=0] + 1 = 1 \]

然而显然不能让 \(m\) 等于 \(0\) 啊(笑
于是这个式子就得证了。

证明 \((2)\)
随便口胡下感性理解吧, 严格证明以后再补上。

真实的容斥原理

吹毛断发,削铁如泥。 (话说 \([n]\) 是不是就是 \(2^{\{1,\cdots,n\}}\) 啊)

\[\Bigg| \bigcup_{i=1}^n A_i \Bigg| = \sum_{S\subseteq[n], S \neq \emptyset} (-1)^{|S|+1} \Bigg| \bigcap_{i \in S} A_i \Bigg|\tag{1}\]

\[\Bigg| \bigcap_{i=1}^n A_i \Bigg| = \sum_{S\subseteq[n], S \neq \emptyset} (-1)^{|S|+1} \Bigg| \bigcup_{i \in S} A_i \Bigg|\tag{2} \]

\[\Bigg| \bigcap_{i=1}^n A_i \Bigg| = \sum_{S\subseteq[n]} (-1)^{|S|} \Bigg| \bigcap_{i \in S} \overline{A_i} \Bigg|\tag{3} \]

\[\bigg|\bigcap_{i=1}^n A_i \bigg| = |U| - \bigg|\bigcup_{i=1}^n \overline{A_i} \bigg| \tag{4} \]

\((2)\)\((3)\) 本质是一样的:

\[\sum_{S\subseteq[n]} (-1)^{|S|} \Bigg| \bigcap_{i \in S} \overline{A_i} \Bigg| = \sum_{S\subseteq[n]} (-1)^{|S|} \begin{Bmatrix} |U|- \Bigg| \bigcup_{i \in S} A_i \Bigg| \end{Bmatrix} \]

\[= |U|\sum_{S\subseteq[n]} (-1)^{|S|} + \sum_{S\subseteq[n]} (-1)^{|S|+1} \Bigg| \bigcup_{i \in S} A_i \Bigg| \]

其中,

\[|U|\sum_{S\subseteq[n]} (-1)^{|S|} = |U|\sum_{i=0}^n \binom{n}{i} (-1)^i = |U|[n=1] \]

经典经典容斥问题

不定方程非负整数解计数

不定方程 \(x_1 + \cdots + x_k = m \;\; (m \ge 0)\) 的非负整数解的个数为 \(\binom{m+k-1}{k-1}\), 由插板法得到。
这个方程再加上 \(k\) 个限制条件 \(x_i \le b_i \;\;(b_i \ge 0)\), 求非负整数解的数量,解法如下:
按照 \(\Bigg| \bigcap_{i=1}^n A_i \Bigg| = \sum_{S\subseteq[n]} (-1)^{|S|} \Bigg| \bigcap_{i \in S} \overline{A_i} \Bigg|\) 来转化条件, 就把上界限制改成了下界限制!
那么, 不定方程 \(x_1 + \cdots + x_k = m \;\; (m \ge 0)\) 加上 \(k\) 个限制条件 \(x_i \ge b_i + 1 \;\;(b_i \ge 0)\), 求非负整数解的个数, 解法如下:
在方程右边减去下界和 \(\sum(b_i+1)\), 方程的解就是原来带下界方程的解。

错排计数

递推比较爽, 但是写容斥式子更爽。
还是按照 \((3)\) 来写:

\[D_n = \sum_{i=0}^n (-1)^i \binom{n}{i} (n-i)! = n! \sum_{i=0}^n \frac{(-1)^i}{i!} \]

凑容斥系数的方法

用于将各种形如 \(\Bigg|\text{balabala}_{i=1}^n |A_i| \Bigg|\) 的式子转化成 \(\sum_{S \in [n], S \neq \emptyset} g(|S|) \Big| \bigcap_{i \in S} A_i \Big|\) 的形式。

假设恰好被 \(x\) 个集合覆盖的元素对 \(\Bigg|\text{balabala}_{i=1}^n |A_i| \Bigg|\) 的贡献为 \(f(x)\), 大小为 \(x\) 的集合的容斥系数为 \(g(x)\), 那么

\[\sum_{T \subseteq S^{'}, T \neq \emptyset} g(|T|) = f(|S^{'}|) \]

其中, \(S^{'}\)\(S\) 的子集, \(S^{'}\) 中的下标 \(i\) 都满足某元素被 \(A_i\) 覆盖。

\(|S^{'}| = m\), 上式化简为:

\[\sum_{i=0}^m \binom{m}{i} g(i) = f(m) \]

反演,

\[g(m) = \sum_{i=0}^m (-1)^{m-i} \binom{m}{i} f(i) \]

例子:[COCI2009-2010#6] XOR
设第 \(i\) 个三角形为 \(A_i\), 要求的就是 \(| \text{Xor}_{i=1}^n A_i |\)
考虑容斥, 转为 \(\sum_{S \in [n], S \neq \emptyset} g(|S|) \Big| \bigcap_{i \in S} A_i \Big|\)
\(g(m) = \sum_{i=0}^m (-1)^{m-i} \binom{m}{i} f(i)\), 其中 \(f(i) = [2 \nmid i]\)
所以

\[g(m) = \sum_{i=0}^m (-1)^{m-i} \binom{m}{i} [2 \nmid i] \]

\[= (-1)^{m+1} \sum_{i=0}^m (-1)^{i+1} \binom{m}{i} [2 \nmid i] = (-1)^{m+1} 2^{m-1} \tag{$m \ge 0$} \]

所以

\[| \text{Xor}_{i=1}^n A_i | = \sum_{S \in [n], S \neq \emptyset} (-1)^{|S|+1}2^{|S|-1} \Big| \bigcap_{i \in S} A_i \Big| \]

问题转化为求若干三角形的交。
由于两个三角形交起来仍然是三角形,交运算有交换律和结合律, 所以现在的问题是如何求两个三角形的交。

#include<bits/stdc++.h>
using namespace std;
const int N = 13;

int n, x[N], y[N], r[N];

void meg(int &x1,int &y1,int &r1,int x2,int y2,int r2) {
// 	if(x1>x2) {
// 		swap(x1,x2); swap(y1,y2); swap(r1,r2);
// 	}
// 	if(y2>=y1) {
// 		r1 = max(0, min(y1+r1-y2-(x2-x1), r1));
// 		x1 = x2, y1 = y2;
// 	} else {
// 		r1 = max(0, min(x2+r2-x1,y1+r1-y2));
// 		y1 = y2;
// 	}
    r1 = min(x1+y1+r1, x2+y2+r2) - max(x1,x2) - max(y1,y2);
    r1 = max(r1, 0);
    x1 = max(x1,x2);
    y1 = max(y1,y2);
	return;
}

double calc(int S) {
		int X=0, Y=0, R=0;
		for(int i=0; i<n; ++i)if((S>>i)&1) {X=x[i+1], Y=y[i+1], R=r[i+1]; break;}
			S -= S&(-S);
			for(int i=0; i<n; ++i)if((S>>i)&1) meg(X,Y,R, x[i+1], y[i+1], r[i+1]);
				return (double)R*(double)R / (double)2;
}

int main() {
	
	cin >> n;
	for(int i=1; i<=n; ++i) {
		scanf("%d%d%d", &x[i],&y[i],&r[i]);
	}
	double ans = 0;
	for(int S=1; S<(1<<n); ++S) {
		int tmp = 0, SS = S;
			while(SS) ++tmp, SS-=SS&(-SS);
		double nowans = 1<<(tmp-1);
		if(!(tmp&1)) nowans = -nowans;
			nowans *= calc(S);
				ans += nowans;
	}
	printf("%.1lf", ans);
	return 0;
}

min-max 容斥(最值反演owo)

定义 \(min(S) = \min_{a_i \in S} a_i\)\(max(S) = \max_{a_i \in S} a_i\)
\(\text{min-max}\)容斥 的形式是这样的:

\[max(S) = \sum_{T \subseteq S} (-1)^{|T|+1} min(T) \]

证明:
\(S\) 内元素 \(a_i\) 降序排序, 此时 \(a_k\) 就是 \(S\) 内第 \(k\) 大的元素。
左边 \(= a_1\)
对于右边:
使得 \(min(T) = a_1\)\(T\) 只有 \(\{ a_1 \}\) 这一种, 贡献为 \((-1)^2 a_1 = a_1\)
对于 \(min(T) = a_k \; \; (k > 1)\)\(T\), 首先它必须有 \(a_k\), 其次 \(a_p (p>k)\) 不能有, 所以这样的 \(T\) 共有 \(2^{k-1}\) 种选法, 通过人类智慧得知(归纳法, 不详细证了。) ,这 \(2^{k-1}\) 种选法之中, 其中一半的集合大小是奇数,另一半是偶数, 结合 min-max容斥的式子知, 这样的 \(T\) 贡献为 \(0\)

所以 min-max容斥的式子是正确的。

posted @ 2020-08-05 21:20  xwmwr  阅读(375)  评论(7编辑  收藏  举报