ICPC WC 2014 Day 7
by VFleaKing
我们先说点水爆了的内容吧!
可以用小学生的容斥来解决!
\begin{equation} \sum_{k = 0}^{n}{(-1)^k\binom{n}{k} (n - k)!} \end{equation}
\begin{eqnarray} & & \sum_{k = 0}^{m - 1}{(-1)^k \binom{m}{k}} \\ & = & \sum_{k = 0}^{m}{(-1)^k \binom{m}{k}} - (-1)^{m} \\ & = & (1 + (-1))^{m} - (-1)^{m} \\ & = & -(-1)^{m} \end{eqnarray}
请注意上面的式子有个例外,就是 $n = 0$ 时左边为 $1$。正确的写法是: \begin{equation} \sum_{k = 0}^{n}{(-1)^k\binom{n}{k}} = [n = 0] \end{equation}
其中 $[P]$ 即 $P$ 成立时为 $1$,不成立时为 $0$。
等等我们好像是不知道 $g$ 而知道 $f$ 吧!
所以我们就得到了酱紫的东西:(妈呀其实就是容斥)
\begin{eqnarray} f(n) & = & \sum_{k = 0}^{n} \binom{n}{k} g(k)\\ g(n) & = & \sum_{k = 0}^{n} (-1)^{n - k} \binom{n}{k} f(k) \end{eqnarray}
假设有两个函数 $f$ 和 $g$ 满足:
\begin{equation} f(n) = \sum_{k} a_{n, k} g(k) \end{equation}
而且:
\begin{equation} f(n) = \sum_{d \mid n}{g(d)} \end{equation}
$f$ 显然好求,他就是 $26^n$。看起来如果这里有个反演就爽了。
我们设函数 $\mu(n)$ 满足:
\begin{equation} \sum_{d \mid n} \mu(d) = [n = 1] \end{equation}
可以知道 $\mu(\prod_p p^\alpha) = \prod_p [\alpha = 1](-1)$ (为啥是这个式子以后再侃 = =)
接下来说一句废话
\begin{equation} g(n) = \sum_{m \mid n} [\frac{n}{m} = 1]g(m) \end{equation}
代进去!
\begin{equation} g(n) = \sum_{m \mid n} \sum_{d \mid \frac{n}{m}} \mu(d) g(m) \end{equation}
把下标换得漂亮点:
\begin{equation} g(n) = \sum_{d \mid n} \mu(\frac{n}{d}) f(d) \end{equation}
所以我们就得到了酱紫的东西:(妈呀其实这也是容斥)
\begin{eqnarray} f(n) & = & \sum_{d \mid n} g(d)\\ g(n) & = & \sum_{d \mid n} \mu(\frac{n}{d}) f(d) \end{eqnarray}
首先要有一个性质,比如这样:
\begin{equation} \sum_{d \mid n} \mu(d) = [n = 1] \end{equation}
所以瞬间这个魔术就无聊了。找那个神奇的“性质”难度等同于找逆矩阵。
= =……我还是得说几句。刚才我们看到的要反演原式……
妈呀这不就是下三角矩阵?那逆矩阵还用我来说?
现在我们来推 $k \leq n$ 的一般情况,即:
\begin{equation} f(n) = \sum_{k = 1}^{n} a_{n, k} g(k) \end{equation}
那么一定满足性质:
\begin{equation} \sum_{k = 1}^{n} a_{n, k} \mu(k, m) = [n = m] \end{equation}
这个可以递推求出。
然后我们不用废话了,答案很明显了:
\begin{equation} g(n) = \sum_{k = 1}^{n} \mu(n, k) f(k) \end{equation}
感觉讲得好水的……相信刚才讲的大家都已经跃(zao)跃(jiu)欲(zhi)试(dao)了。
\begin{equation} \text{萌萌哒} = \sum_{n \mid d} \mu(\frac{d}{n}) f(d) \end{equation}
给你整数 $n, c, d$。现在有整数 $x_1, \dots, x_n$ 和 $b_1, \dots, b_n$ 满足 $0 \leq x_1, \dots, x_n, b_1, \dots, b_n < p$,且对于 $1 \leq i \leq n$ 满足:
\begin{equation} \sum_{j = 1}^{n} \gcd(i, j)^c \cdot \lcm(i, j)^d \cdot x_j \equiv b_i \pmod{p} \end{equation}
首先学过小学奥数的我们知道:$\lcm(i, j) = \frac{ij}{\gcd(i. j)}$。所以这题其实是:
\begin{equation} \sum_{j=1}^n \gcd(i,j)^{c - d} \cdot i^d \cdot j^d \cdot x_j = b_i \end{equation}
所以我们可以写出这样的等式:
\begin{equation} \sum_{j = 1}^n \sum_{d}[d \mid i][d \mid j] \cdot f_r(d) \cdot g(i) \cdot h(j) \cdot x_j = b_i \end{equation}
接下来怎么办?好像并没有简化问题。我们老样子把两个求和符号反过来,得到:
\begin{equation} \sum_{d} \sum_{j=1}^n [d \mid i][d \mid j] \cdot f_r(d) \cdot g(i) \cdot h(j) \cdot x_j = b_i \end{equation}
见过有人对一个数组求它的莫比乌斯反演是:
$O(\sqrt{n})$ 枚举约数,狄利克雷卷积!
\begin{equation} f(n) = \sum_{d \mid n} g(d) \end{equation}
for (int i = 1; i <= n; i++)
g[i] = f[i];
for (int i = 1; i <= n; i++)
for (int j = i + i; j <= n; j += i)
g[j] -= g[i];
现在看起来 = =……挺无聊的,小学生容斥单手屠。
方便代码能力弱的选手:
for (int i = 0; i < n; i++)
for (int s = 0; s < (1 << n); s++)
if (s >> i & 1)
f[s] += f[s ^ 1 << i];
无脑反着写:
for (int i = 0; i < n; i++)
for (int s = 0; s < (1 << n); s++)
if (s >> i & 1)
f[s] -= f[s ^ 1 << i];
然后发现一个比较显然的性质:(妈呀其实就是二项式反演里的那个玩意儿)
\begin{equation} \sum_{r \subseteq p} (-1)^{\lvert r \rvert} = [p = 0] \end{equation}
这里的 $\lvert r \rvert$ 表示集合的大小。
然后像以前一样做:
\begin{eqnarray} g(p) & = & \sum_{q \subseteq p} [p - q = 0] g(q) \\ & = & \sum_{q \subseteq p} \sum_{r \subseteq p - q} (-1)^{\lvert r \rvert} g(q) \\ & = & \sum_{r \subseteq p} (-1)^{\lvert r \rvert} \sum_{q \subseteq p - r} g(q) \\ & = & \sum_{r \subseteq p} (-1)^{\lvert r \rvert} f(p - r) \\ & = & \sum_{r \subseteq p} (-1)^{\lvert p \rvert - \lvert r \rvert} f(r) \end{eqnarray}
所以我们就得到了酱紫的东西:(妈呀就是裸容斥)
\begin{eqnarray} f(S) & = & \sum_{T \subseteq S} g(T)\\ g(S) & = & \sum_{T \subseteq S} (-1)^{\lvert S \rvert - \lvert T \rvert} f(T) \end{eqnarray}
于是:
\begin{eqnarray} f(S) & = & \sum_{T \subseteq S} g(T)\\ g(S) & = & \sum_{T \subseteq S} \mu(S - T) f(T) \end{eqnarray}
你会觉得非常似曾相识!
一个数可以对应着一个多重子集,即它的素因数分解。
所以以多重子集的角度来看,数论里的莫比乌斯函数简直显然得不能再显然了。
学过小学数学的我们知道,等比数列公比为 $1$ 时要特判。看,if 来了:
\begin{equation} \frac{1}{n}\sum_{k = 0}^{n - 1} \epsilon^{vk} = [v \bmod n = 0] \end{equation}
注意到:
\begin{eqnarray} & & [(p + q) \bmod n = r] \\ & = & [(p + q - r) \bmod n = 0] \\ & = & \frac{1}{n}\sum_{k = 0}^{n - 1} \epsilon^{(p + q - r)k} \\ & = & \frac{1}{n}\sum_{k = 0}^{n - 1} \epsilon^{-rk} \epsilon^{pk} \epsilon^{qk} \end{eqnarray}
这三部分几乎是独立的!
所以我们就得到了酱紫的东西:
\begin{eqnarray} f_m & = & \sum_{k = 0}^{n - 1} \epsilon^{mk} g_k\\ g_m & = & \frac{1}{n} \sum_{k = 0}^{n - 1} \epsilon^{-mk} f_k \end{eqnarray}
看起来反演解决了一些在下标上的奇怪二元运算的卷积。
\begin{equation} c_r = \sum_{p, q} [f(p, q) = r] a_p b_q \end{equation}
感觉讲得好水的……相信刚才讲的大家都已经跃(zao)跃(jiu)欲(zhi)试(dao)了。
如果要用于推导:
\begin{eqnarray} f(S) & = & \sum_{S \subseteq T} g(T)\\ g(S) & = & \sum_{S \subseteq T} (-1)^{\lvert T \rvert - \lvert S \rvert} f(T) \end{eqnarray}
妈呀不会做了!
这样就爽多了:
\begin{eqnarray} c_{r, i} & = & \sum_{p, q \subseteq r} [\lvert p \rvert = i] [\lvert q \rvert = \lvert r \rvert - i] [p \or q = r] a_p b_q \\ & = & \sum_{p, q \subseteq r} [\lvert p \rvert = i][\lvert q \rvert = \lvert r \rvert - i] \sum_{v \subseteq r} (-1)^{\lvert r \rvert - \lvert v \rvert} [p \subseteq v] [q \subseteq v] a_p b_q \\ & = & \sum_{v \subseteq r} (-1)^{\lvert r \rvert - \lvert v \rvert} \sum_{p, q \subseteq v} [\lvert p \rvert = i] [\lvert q \rvert = \lvert r \rvert - i] a_p b_q \\ & = & \sum_{v \subseteq r} (-1)^{\lvert r \rvert - \lvert v \rvert} \sum_{p \subseteq v} [\lvert p \rvert = i] a_p \sum_{q \subseteq v} [\lvert q \rvert = \lvert r \rvert - i] b_q \end{eqnarray}
祝大家WC后面几天过得愉快!