题解「CF1436F Sum Over Subsets」

题意

一个多重集 \(S\),有 \(m\) 种不同的数,第 \(i\) 种数为 \(a_i\),有 \(freq_i\) 个。

求满足如下条件的和式 \(\sum_{x\in A}\sum_{y\in B}xy\) 的值:

  • \(B\subset A\)
  • \(|B|=|A|-1\)
  • \(\gcd_{x\in A}\{x\}=1\)

注意,其中 \(A,B\) 也为多重集。

\(\texttt{Data Range:}a_i,m\leq10^5,freq_i\leq10^9\)

分析

\(g_i\)\(\gcd_{x\in A}\{x\}=i\) 的答案,那么最终所求为 \(g_1\)

但是直接求不太方便,我们用一个套路 \(\text{trick}\),设 \(f_i\)\(\sum_{i|j} g_j\) 的值。那么通过 \(\text{Mobius}\) 反演可以得到 \(g_1=\sum_{i} f_i\mu(i)\)。于是我们现在只需要求出 \(\gcd_{x\in A}\)\(i\) 的倍数的答案。

枚举 \(i\) ,对于 \(\gcd\)\(i\) 的倍数的数分类。设 \(i\) 的倍数构成的集合为 \(S_i\)。计算同一类中的贡献,设在和式中 \(A\) 取出的是 \(x\)\(B\) 取出的是 \(y\),有:

  • \(x,y\)同一个数 时,贡献式为:

    \[x^2\times(|S_i|-1)\times2^{|S_i|-2}\times freq_x \]

  • \(x,y\) 具有相同数值但 并不是同一个数 时,贡献式为:

    \[x^2\times\left((|S_i|-2)\times2^{|S_i|-3}+2^{|S_i|-2}\right)\times C_{freq_i}^2 \]

  • \(x,y\) 数值不同 时:

    \[xy\times\left((|S_i|-2)\times2^{|S_i|-3}+2^{|S_i|-2}\right)\times freq_x\times freq_y \]

通过枚举哪一个数在 \(B\) 中不被包含来包含所有情况,非常巧妙。

对于第三个柿子,我们不可能枚举所有 \(x,y\)。因此需要另辟蹊径。发现提取无关项出来后,一个前缀和就可以解决了。

枚举数值使用调和级数的 \(\text{trick}\) 即可。总时间复杂度为 \(O(n \ln n+n\log_2 (\sum_i freq_i))\)

posted @ 2020-11-03 11:36  tommymio  阅读(187)  评论(0编辑  收藏  举报