首页 > 其他分享 >AcWing 199. 余数之和 题解

AcWing 199. 余数之和 题解

时间:2023-03-12 16:59:31浏览次数:47  
标签:lfloor right 199 题解 rfloor sqrt dfrac left AcWing

做了一下午……题解都看不懂,最后自己比比划划弄懂了。

题意:给出 \(n,k\),求 \(\sum\limits_{i=1}^n k \mod i\)。

首先取模形式十分不好处理,所以我们可以根据取模运算定义做一个小小的变换:

\[\sum\limits_{i=1}^n k \mod i = \sum\limits_{i=1}^n k - \left\lfloor \dfrac{k}{i} \right\rfloor \cdot i \]

提取出定值 \(k\),进一步简化为求

\[nk - \sum\limits_{i=1}^n \left\lfloor \dfrac{k}{i} \right\rfloor \cdot i \]

我们发现重点在于求 \(\sum\limits_{i=1}^n \left\lfloor \dfrac{k}{i} \right\rfloor \cdot i\)。

我们可以尝试寻找规律,不难发现 \(\left\lfloor \dfrac{k}{i} \right\rfloor\) 的值呈块状分布(即结果数组分成若干块,每块中值相等),这种东西还有另一个名字:整除分块。

首先一个块内部的答案显然是好求的,设块起点为 \(l\),终点为 \(r\),则块的贡献为 \(\left\lfloor \dfrac{k}{l} \right\rfloor \cdot \sum\limits_{i=l}^r i\)。

由于第一个块起点已知(\(1\)),第二个块的起点即为第一个块终点加一,所以我们需要快速根据起点求出一个块的重点。

首先由于块内值都相同,可以设 \(x=\left\lfloor \dfrac{k}{l} \right\rfloor=\left\lfloor \dfrac{k}{r} \right\rfloor\)

根据 \(x = \left\lfloor \dfrac{k}{r} \right\rfloor\) 可变形得 \(xr \leq k,r \leq \left\lfloor \dfrac{k}{x} \right\rfloor\),根据 \(x=\left\lfloor \dfrac{k}{l} \right\rfloor\) 得 \(r \leq \left\lfloor \dfrac{k}{\left\lfloor \dfrac{k}{l} \right\rfloor} \right\rfloor\)

最后分析一下这么做的时间效率:

当 \(i > \sqrt{n}\) 时,\(\left\lfloor \dfrac{k}{i} \right\rfloor \leq \sqrt{n}\) ,也就是说原式只有小于 \(\sqrt{k}\) 种取值。

当 \(i \leq \sqrt{n}\) 时,\(i\) 只有小于 \(\sqrt{k}\) 种取值,也就是说原式也只有小于 \(\sqrt{k}\) 种取值。

所以最多有 \(2 \sqrt{n}\) 个块,我们对于每个块可以 \(o(1)\) 计算,时间可以通过。

标签:lfloor,right,199,题解,rfloor,sqrt,dfrac,left,AcWing
From: https://www.cnblogs.com/victoryang-not-found/p/17208391.html

相关文章

  • AcWing94场周赛复盘
    快速手速题不能犹豫已知,每个背包最多可以装件物品。请你计算,要装下件物品最少需要多少个背包。输入格式一个整数。输出格式一个整数,表示所需背包的最少数量。数据范围......
  • windows 文件夹打开默认是小窗口问题解决
    目录windows文件夹打开默认是小窗口问题解决问题解决windows文件夹打开默认是小窗口问题解决不知道误操作了什么,最近点击windows文件夹默认打开的都是小窗口,每次需要点......
  • 3 月 8 日测试题解
    3月8日测试题解T1题意给你一张图\(G=(V,E)\),\(|V|=n\),\(|E|=m\),带边权、点权。你可以执行以下操作任意多次:选取一个顶点,将其自身与与其相连的边删去当你......
  • 2023.3.12 模拟赛题解
    天黑黑题意大致:给出含\(\max\)和\(+\)的表达式以及其中的\(n\)个数,求其最大值。用前缀表达式的形式给出,X表示一个要填的数,B表示\(\max\),A表示\(+\)。题解......
  • CF915E 题解(动态开点线段树)
    题目传送门简要题意:题面就挺简要的。看到题目第一眼想到线段树,再看一眼数据范围,\(1≤n≤10^9\),寄,既然不能直接用线段树,那怎么办呢?可以离散化,为了避免麻烦的离散化,......
  • P2782 友好城市题解
    题目传送门题意:给定一些上下的线段,求出最多不相交的线段数量。一开始看错题了,以为是给定一堆线段,求出线段最大不交数量,然后就写了一个树状数组优化\(dp\)结果样例都不过,......
  • CF1785D Range = √Sum 题解
    题目传送门(第一次CF场切绿欸)题意考虑将这段序列的平均数设为\(4n\),那么总和就会是\(4n^2\),这时候就需要让最值差等于\(2n\),直接让他等于\(3n\)和\(5n\)就可......
  • 【题解】CF1801G A task for substrings
    考虑拆开贡献,前缀贡献痕容易算。而跨越\([l-1,l]\)的贡献,考虑在正串ACAM找到\([1,l-1]\),反串ACAM找到\([l,r]\),那么要做的就是在两串的fail链祖先上,找到能凑成完......
  • 2020 年百度之星·程序设计大赛 · 官方题解汇总
    1、测试赛2、初赛一留个备份,方便以后找3、初赛二4、初赛三5、复赛......
  • P1149 [NOIP2008 提高组] 火柴棒等式 题解
    [NOIP2008提高组]火柴棒等式题目描述给你\(n\)根火柴棍,你可以拼出多少个形如\(A+B=C\)的等式?等式中的\(A\)、\(B\)、\(C\)是用火柴棍拼出的整数(若该数非零,则最高......