博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[洛谷P5174]圆点
阅读量:4682 次
发布时间:2019-06-09

本文共 1171 字,大约阅读时间需要 3 分钟。

题目大意:给你$R(R\leqslant10^{14})$,求:

$$
\sum\limits_{x\in\mathbb{Z}}\sum\limits_{y\in\mathbb{Z}}[x^2+y^2\leqslant R](x^2+y^2)
$$
题解:明显可以发现这是对称的,所以可以只枚举四分之一,并且$x,y\leqslant\sqrt R$。所以式子成了$4\sum\limits_{x=0}^{\sqrt R}\sum\limits_{y=1}^{\sqrt R}[x^2+y^2\leqslant R](x^2+y^2)$。这样就可以暴力枚举了,复杂度$O(R)$。

然后那个判断有点烦,去掉,变成$4\sum\limits_{x=0}^{\sqrt R}\sum\limits_{y=1}^{\sqrt{R-x^2}}(x^2+y^2)$

$$
\begin{align*}
&4\sum\limits_{x=0}^{\sqrt R}\sum\limits_{y=1}^{\sqrt{R-x^2}}(x^2+y^2)\\
=&4\sum\limits_{x=0}^{\sqrt R}(\sqrt{R-x^2}x^2+\sum\limits_{y=1}^{\sqrt{R-x^2}}y^2)\\
\end{align*}\\
令Y=\sqrt{R-x^2}\\
=4\sum\limits_{x=0}^{\sqrt R}(Yx^2+\dfrac{Y(Y+1)(2Y+1))}6)\\
$$

复杂度$O(\sqrt R)$

卡点:

 

C++ Code:

#include 
#include
const long long mod = 1e9 + 7, mod6 = mod * 6;long long R, ans;inline void reduce(long long &x) { x += x >> 63 & mod; }int main() { scanf("%lld", &R); for (long long x = sqrt(R), y; ~x; --x) { y = sqrt(R - x * x); reduce(ans += x * x % mod * y % mod - mod); reduce(ans += y * (y + 1) % mod6 * (2 * y + 1) / 6 % mod - mod); } printf("%lld\n", ans * 4 % mod); return 0;}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/10258910.html

你可能感兴趣的文章
RTP Payload Format for Transport of MPEG-4 Elementary Streams over http
查看>>
两个时间相差多少 .net中的timespan应用
查看>>
递归 换零钱问题——由打靶子问题引申
查看>>
Python-函数基础
查看>>
Extensible Messaging and Presence Protocol (XMPP) 简介
查看>>
Farm Irrigation
查看>>
windows平板的开发和选型
查看>>
无平方因子的数(数论初步) By ACReaper
查看>>
C语言截取字符串
查看>>
如何查自己的账单
查看>>
JAVA8学习笔记(二)----三个预定义接口
查看>>
JDBC连接各种数据库的字符串
查看>>
构建之法阅读笔记06
查看>>
CentOS minimal新装配置笔记
查看>>
压缩映象原理的一个应用
查看>>
Aurora — 一个在 MSOffice 内输入 LaTeX 公式的很好用插件
查看>>
关于sql优化的一个小总结
查看>>
Java语言中的正则表达式
查看>>
Java环境变量设置
查看>>
【JBPM4】判断节点decision 方法3 handler
查看>>