zoukankan      html  css  js  c++  java
  • 【容斥原理,莫比乌斯反演】用容斥替代莫比乌斯反演第二种形式解决gcd统计问题

    名字虽然很长。但是其实很简单,对于这一类问题基本上就是看你能不能把统计的公式搞出来(这时候需要一个会推公式的队友)

    来源于某次cf的一道题,盼望上紫的我让潘学姐帮我代打一道题,她看了看跟我说了题解,用反演写的,然后……还是错了23333。赛后题解给出的是用容斥原理解决问题,但是我并看不懂学姐的公式,也还不懂莫比乌斯反演的第二种形式。直到最近刚看,才恍然大悟。

    这类问题的特点是,给一个集合,问所有子集的w(gcd(某个子集))的和问题(w表示某个函数,一般是跟子集长度有关)。

    可以做出两个函数。

    一个是 f(x)= w(gcd(子集)=x)的答案。

    一个是g(x)=w(gcd(子集)=k*x)的答案。(k≥1)。而且g(x)要求可以直接求出来。

    显然g(x)=∑f(kx)(k≥1)。

    然后这个东西可以反演,变成

    f(x)=∑x|d u(d/x)*g(d)。

    然后就是答案就是ans=∑f(x) (或者满足某种性质的x)

    而如果时间复杂度要求是nlogn的,然后容斥理解,就很简单了。

    f(x)=g(x)-∑f(kx) (k大于等于2),通过倒序处理答案,调和级数复杂度解决了问题。

    当然容斥也有不足的地方,比如遇到低于nlogn的复杂度,或者需要预处理答案的那种(基本上就是遇到杜教课件里面的两种情况,1空间换时间,2 10^10次,就得考虑用反演变换化简了)

    但是一旦容斥可以写,问题就变成如果搞出w函数。就变成数学公式,就可以甩锅给队友。而且切起来一气呵成。

    题目合集上我在vjudge找到了一场练习,除掉几道八中上面的,其他基本写掉了,而且大部分可以用容斥写,感觉真心作弊。

    https://vjudge.net/contest/139539#overview

    另外这就是开头说的cf的某道题:http://codeforces.com/contest/839/problem/D

  • 相关阅读:
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark RDD(Resilient Distributed Datasets)论文
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    【机器学习实战】第10章 K-Means(K-均值)聚类算法
    [译]flexbox全揭秘
  • 原文地址:https://www.cnblogs.com/Macaulish/p/7481365.html
Copyright © 2011-2022 走看看