zoukankan      html  css  js  c++  java
  • 题解「CF1436F Sum Over Subsets」

    题意

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

    求满足如下条件的和式 (sum_{xin A}sum_{yin B}xy) 的值:

    • (Bsubset A)
    • (|B|=|A|-1)
    • (gcd_{xin A}{x}=1)

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

    ( exttt{Data Range:}a_i,mleq10^5,freq_ileq10^9)

    分析

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

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

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

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

      [x^2 imes(|S_i|-1) imes2^{|S_i|-2} imes freq_x ]

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

      [x^2 imesleft((|S_i|-2) imes2^{|S_i|-3}+2^{|S_i|-2} ight) imes C_{freq_i}^2 ]

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

      [xy imesleft((|S_i|-2) imes2^{|S_i|-3}+2^{|S_i|-2} ight) imes freq_x imes freq_y ]

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

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

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

  • 相关阅读:
    css基础--Display(显示) and Visibility(可见性)and position (定位)
    css3基础--Margin(外边距)&&padding(外边距)
    前端求职-js
    前端求职-html&css
    css基础3--box module&Border
    css基础-font&link&list属性
    值得学习的PHP
    c++构造函数浅析
    变量定义原则
    函数
  • 原文地址:https://www.cnblogs.com/tommy0103/p/13919409.html
Copyright © 2011-2022 走看看