组合恒等式:
\[\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\) 归纳。
- \(k = 0\), \(S_0(n) = n\),是关于 \(n\) 的 \(1\) 次多项式。
- 考虑一个十分奇妙的构造:
\[\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{上升幂转普通幂}
\]
证明:
用归纳法证明比较优美。(合并的快感)
- \(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容斥的式子是正确的。