首页 > 其他分享 >CF1884D Counting Rhyme 题解

CF1884D Counting Rhyme 题解

时间:2023-12-30 09:11:27浏览次数:34  
标签:lfloor CF1884D frac gcd 题解 sum Rhyme rfloor 这题

Problem - D - Codeforces

Counting Rhyme - 洛谷

法1:

  • 我们之前肯定看过这样一道非常经典的题:

  • 求 \(a_i\) 中有多少对 \((i,j)\),满足 \(\gcd(a_i,a_j)=1\)

    \(n \leq 10^6\)

  • 这题是莫反板子题,但显然可以不用莫反做。先不说这题怎么做,我们发现这道题和 CF1884D 的不同之处在于这题 \(\gcd\) 可以为一些特殊的值

  • 我们先考虑原题 \(O(n^2)\) 怎么做,我们可以枚举 \((i,j)\),记录 \(f_i\) 表示 \(a\) 中是否存在 \(i\) 的因子,不存在为 \(1\),存在为 \(0 \)

  • 则答案为:

  • \[\sum_{i=1}^{n}\sum_{j=i+1}^{n} f_{\gcd(a_i,a_j)} \]

  • 然后考虑怎么优化成 \(O(n \log n)\),发现 \(a_i \leq n\),因此要用到一个非常经典的思路:改变枚举顺序

  • 我们改为枚举 \(\gcd(a_i,a_j)\),则答案变为:

  • \[\sum_{g=1}^{n} f_g \times num_g \]

  • 其中 \(num_g\) 表示 \(\gcd = g\) 的数对个数。然后求 \(num_g\) 的过程就变成了上面那个问题

  • 我们考虑数论容斥:设 \(g_i\) 表示 \(i|gcd(a_x,a_y)\) 的个数,然后再容斥即可

  • 复杂度 \(O(n \ln n)\)


法2:

  • 我们之前肯定看过这样一道非常经典的题:

  • 求 a_i 中有多少对 (i,j),满足 \gcd(a_i,a_j)=1

    n \leq 10^6

  • 这题是莫反板子题,因此这题我们也考虑暴力莫反

  • 现在是推式子时间!

  • 记 \(b_i\) 为 \(a_i\) 的桶

  • \[\begin{align} \sum_{i=1}^{n}\sum_{j=i+1}^{n} \prod_{k|a_i,k|a_j} [b_k=0] &= \sum_{i=1}^{n}\sum_{j=i+1}^{n} \prod_{k|a_i,k|a_j} [b_k=0] \end{align} \]

  • 然后转为枚举实际的值,而不是编号

  • \[\begin{align} \sum_{i=1}^{n}\sum_{j=1}^{n} b_i b_j f_{\gcd(i,j)} &= \sum_{i=1}^{n}\sum_{j=1}^{n} \sum_{d=1}^{n} b_i b_j f_d [\gcd(i,j)=d] \\ &= \sum_{d=1}^{n} \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{j=1}^{\lfloor \frac{n}{d} \rfloor} b_{id} b_{jd} f_d [\gcd(i,j)=1] \\ &= \sum_{d=1}^{n} \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{j=1}^{\lfloor \frac{n}{d} \rfloor} b_{id} b_{jd} f_d \sum_{k|i,k|j} \mu(k) \\ &= \sum_{d=1}^{n} f_d \sum_{k=1}^{\lfloor \frac{n}{d} \rfloor} \mu(k) \sum_{i=1}^{\lfloor \frac{n}{dk} \rfloor} \sum_{j=1}^{\lfloor \frac{n}{dk} \rfloor} b_{idk} b_{jdk} \\ &= \sum_{d=1}^{n} f_d \sum_{k=1}^{\lfloor \frac{n}{d} \rfloor} \mu(k) (\sum_{i=1}^{\lfloor \frac{n}{dk} \rfloor} b_{idk})^2 \\ &= \sum_{T=1}^{n} (\sum_{i=1}^{\lfloor \frac{n}{T} \rfloor} b_{iT})^2 \sum_{d|T} f_d \mu(\frac{T}{d}) \end{align} \]

  • 此时前面的平方可以 \(O(n \ln n)\) 处理,去除这一项后剩余的是一个狄利克雷卷积的形式,可以做到 \(O(n \ln n)\),故最终复杂度 \(O(n \ln n)\)

  • 注意:这么算的是没有顺序的,但因为 \((i,i)\) 不可能成为答案,要注意答案除以 \(2\)

标签:lfloor,CF1884D,frac,gcd,题解,sum,Rhyme,rfloor,这题
From: https://www.cnblogs.com/fox-konata/p/17936034.html

相关文章

  • [ABC334C] Socks 2 题解
    题目传送门一道贪心题。数量为\(2\)的袜子不用考虑,因为最好的情况就是相同颜色的配一对。我们只需要考虑那\(k\)种只有\(1\)个的袜子,如果\(k\)为偶数,答案为相邻两数之差之和;如果\(k\)为奇数,就枚举删掉一个数,让剩下的数按照\(k\)为偶数的情况做,最后取一个最小值。这......
  • [ABC334E] Christmas Color Grid 1 题解
    题目传送门一道dfs题。先统计出绿连通块数量,然后对于每个红色方块统计涂成绿色方块后会变成多少个连通块。正常涂成绿色后应该会增加一个大小为\(1\)的绿连通块,但若是有不同的绿连通块与其相邻,答案又会减少\(1\)。Code#include<bits/stdc++.h>constlonglongIMX=1......
  • CF1917F Construct Tree 题解
    Description给你一个数组\(l_1,l_2,\dots.l_n\)和一个数字\(d\)。问你是否能够构造一棵树满足以下条件:这棵树有\(n+1\)个点。第\(i\)条边的长度是\(l_i\)。树的直径是\(d\)。只需要判断是否有解即可。\(2\len\le2000,1\led\le2000,1\lel_i\led\)。Solutio......
  • 【题解】BZOJ 4403序列统计
    tg.BZOJ4403序列统计pj.BZOJ4403序列统计没啥用的题解\(QWQ\)——无脑思考首先要想怎么求单调不上升序列的个数,因为可能会有重复的数,所以不能直接用排列组合。那这道题怎么打呀?我不知道啊\(\dots\)\((~:\)因为原来是单调不下降序列,将第\(i\)位上的数加\(i\),于是......
  • CF1806F GCD Master 题解
    题目链接EasyversionHardversion题目解法参考DeaphetS的题解很有意思的题,感觉\(F1\)不到\(*2900\),\(F2\)超过\(*2900\)F1简化题目中的操作:把\(n\)个数放到\(n-k\)组中,求\(\max(\sum\)每组\(a_i\)的\(\gcd)\)首先考虑所有数互不相同的情况结论1:把\(k+......
  • [CF30E] Tricky and Clever Password 题解
    [CF30E]TrickyandCleverPassword题解注意到一个合法字符串首尾相同,考虑用S的反转和S跑KMP。对于只有一个串,暴力manacher即可。匹配到某一位置\((i,j)\)时,查询区间最长的奇回文串长度,用二分+ST表解决,因为回文串不能超过区间长度。//Problem:TrickyandCle......
  • P9994 [Ynoi Easy Round 2024] TEST_132 题解
    题解怎么都是用暴力日过去的啊。思路考虑根号分治,设阈值为\(B\)。对于第二维出现次数超过\(B\)的,我们可以在修改时暴力更改,这部分复杂度为\(O(\frac{nm}{B})\)。对于第二维出现次数小于\(B\)的,我们可以在修改是打标记,查询时遍历一遍,这部分的复杂度为\(O(mb)\)。大多数......
  • P9995 [Ynoi2000] rspcn 题解
    思路比较典的ODT题目。发现排序是一个非常有性质的操作。它对区间的更改与颜色段均摊差不多。那么我们可以想到用ODT来维护这一整个序列。具体的,区间排序操作可以用ODT维护每次排序产生的段,每段用线段树维护排序后的结果。每次修改就可以进行线段树的分裂与合并。如......
  • P9991 [Ynoi Easy Round 2023] TEST_107 题解
    思路题目即要求删除区间中的一个或多个颜色。考虑假如枚举删除颜色\(k\)。那么在\(l,r\)中的答案为:\[\max_{i=1}^{m+1}a_i-a_{i-1}\]其中\(a_i\)为颜色\(k\)在\(l\simr\)中的出现位置,\(a_{0}=l,a_{m+1}=r\)。可以分类讨论。答案为\(a_1-l\),那么只需要维护\(......
  • AT_abc020_c 题解
    链接(atcoder)链接(luogu)简单算法组合(?算法一爆搜,时间复杂度\(O(2^{n\timesm}\timest)\),不能通过此题。算法二考虑二分\(t\),然后暴搜,时间复杂度\(O(2^{n\timesm}\timeslog2(t))\),不能通过此题。算法三考虑二分\(t\),然后暴记忆化搜索,时间复杂度\(O(n\timesm......