最近中考放假几天都在怼一道BJOI2018的水题,但卡死在90pts跑不动啊!
然后今天发现终于过了然而Hack的数据全RE了然后就开始找新的题目来找回信心。
然后发现智能推荐里有这道题,然后想了1min才想到CQOI到底是哪里的原来是重庆呵
其实还是一道比较好的除法分块的入门题。动一下脑子就可以做了。
我们先观察一下最基础的式子:
\(\sum_{i=1}^n k\ mod\ i\)
然后我们利用取余的基本性质,即\(k\ mod\ i=k-i\lfloor\frac{k}{i}\rfloor\),把原式化为:
\(\sum_{i=1}^n k-i\lfloor\frac{k}{i}\rfloor\),然后把k提取出来,即有\(nk-\sum_{i=1}^n i\lfloor\frac{k}{i}\rfloor\)
然后我们考虑如何求解\(\sum_{i=1}^n i\lfloor\frac{k}{i}\rfloor\),而求它的关键就在于这个\(\lfloor\frac{k}{i}\rfloor\)
我们令\(t=\lfloor\frac{k}{i}\rfloor\),然后我们通过样例\(k=5\)的情况来观察一下规律:
\(i\) | \(1\) | \(2\) | \(3\) | \(4\) | \(5\) | \(6\) | \(7\) | \(8\) | \(9\) | \(10\) |
---|---|---|---|---|---|---|---|---|---|---|
\(t\) | \(5\) | \(2\) | \(1\) | \(1\) | \(1\) | \(0\) | \(0\) | \(0\) | \(0\) | \(0\) |
手玩找规律一下可以发现一个显然的性质:所有的\(t\)都是连续的一段
然后我们考虑把所有相同的\(t\)都一起计算,这样我们可以估计它的复杂度大约为\(O(\sqrt n)\)
然后我们令我们当前处理的区间左端为\(l\),然后我们想一下如何推出\(r\)然后我们继续手玩发现
- 当\(t=0\)时,\(r=n\)
- 当\(t\ne 0\)时,\(r=min(n,\lfloor\frac{k}{t}\rfloor)\)
然后这样我们下一次操作只要使\(l=r+1\)即可
然后对于每一块内,我们计算它们的和:
\(sum=\frac{t\cdot (r-l+1)\cdot (l+r)}{2}\)
然后我们就做下去即可附上超级精简CODE
#include<cstdio>
using namespace std;
long long n,k,t,ans,l,r;
inline int min(int a,int b)
{
return a<b?a:b;
}
int main()
{
scanf("%lld%lld",&n,&k); ans=n*k;
for (l=1;l<=n;l=r+1)
t=k/l,r=t?min(n,k/t):n,ans-=t*(r-l+1)*(l+r)>>1;
printf("%lld",ans);
}
Luogu P2261 [CQOI2007]余数求和的更多相关文章
-
[Luogu P2261] [CQOI2007]余数求和 (取模计算)
题面 传送门:https://www.luogu.org/problemnew/show/P2261 Solution 这题显然有一个O(n)的直接计算法,60分到手. 接下来我们就可以拿出草稿纸推一 ...
-
LUOGU P2261 [CQOI2007]余数求和(数论分块)
传送门 解题思路 数论分块,首先将 \(k\%a\) 变成 \(k-a*\left\lfloor\dfrac{k}{a}\right\rfloor\)形式,那么\(\sum\limits_{i=1}^ ...
-
洛谷 P2261 [CQOI2007]余数求和 解题报告
P2261 [CQOI2007]余数求和 题意: 求\(G(n,k)=\sum_{i=1}^n k \ mod \ i\) 数据范围: \(1 \le n,k \le 10^9\) \(G(n,k)\ ...
-
[Luogu 2261] CQOI2007 余数求和
[Luogu 2261] CQOI2007 余数求和 这一定是我迄今为止见过最短小精悍的省选题了,核心代码 \(4\) 行,总代码 \(12\) 行,堪比小凯的疑惑啊. 这题一看暴力很好打,然而 \( ...
-
洛谷——P2261 [CQOI2007]余数求和
P2261 [CQOI2007]余数求和 关键在于化简公式,题目所求$\sum_{i=1}^{n}k\mod i$ 简化式子,也就是$\sum_{i=1}^{n}(k-\frac{k}{i}\time ...
-
P2261 [CQOI2007]余数求和 【整除分块】
一.题面 P2261 [CQOI2007]余数求和 二.分析 参考文章:click here 对于整除分块,最重要的是弄清楚怎样求的分得的每个块的范围. 假设$ n = 10 ,k = 5 $ $$ ...
-
[洛谷P2261] [CQOI2007]余数求和
洛谷题目链接:[CQOI2007]余数求和 题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + - + k mod n ...
-
洛谷P2261 [CQOI2007] 余数求和 [数论分块]
题目传送门 余数求和 题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod ...
-
P2261 [CQOI2007]余数求和 (数论)
题目链接:传送门 题目: 题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod + k mod + k mod + … + k mod n的值,其中k mod i表示k ...
随机推荐
-
使用 XMPP 构建一个基于 web 的通知工具——转
Inserting of file(使用 XMPP 构建一个基于 web 的通知工具.docx) failed. Please try again. http://www.ibm.com/develo ...
-
Chrome 扩展程序 CrxMouse 优化版 v3.0.1
说明 CrxMouse 原版更新至 v2.7.8,跟进升级优化版至 v3.0.1. 改动说明: 1. 去除可能存在的后台数据上传隐患: 2. 解决鼠标右键拖动时的轨迹漂移问题. 3. 加入部分默认设置 ...
-
解析sql中的表名
最近的项目需求中需要解析sql得表名,由于只需要表名我觉得应该用相对粗暴一点的方式来解析 初步思路: 1.转义字符:去除两个引号连在一起的 2.字符串: 去除所有被引号包裹的 3.括号:识别括号处理 ...
-
多关键字排序(里面有关于操作符(<;<;运算符 和 >;>;运算符 )的重载)
一种排序 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数:现 ...
-
easy-ui 有依赖关系的下拉列表(省市区县)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
-
Linux网卡聚合时,其中一个网卡有两种配置的解决方法
先来看看: ficonfig 其中第一网卡是ssh使用: 第二个网卡是在Linux 最小化安装后IP的配置(手动获取静态IP地址)这个文章中配置过ip是192.168.1.2:在Linux重命名网卡名 ...
-
php开发之常用验证方法
1.邮箱验证 function isEmail($email) { if (!$email) { return false; } return preg_match('/^[_\.0-9a-z-]+@ ...
-
更改pip源至国内镜像
更改pip源至国内镜像 经常在使用Python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样 ...
-
JavaScript Dom基础-9-Dom查找方法; 设置DOM元素的样式; innerHTML属性的应用; className属性的应用; DOM元素上添加删除获取属性;
JavaScript Dom基础 学习目标 1.掌握基本的Dom查找方法 domcument.getElementById() Domcument.getElementBy TagName() 2.掌 ...
-
JS动态改变select选择变更option的index值
document.getElementById("louyuming").options[0].selected=true; function jsSelectIsExitItem ...