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

本文共 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

你可能感兴趣的文章
文件推送
查看>>
戴上耳机,全世界都是你的
查看>>
java 实现 HTTP请求(GET、POST)的方法
查看>>
获取类名和控件id
查看>>
如何:禁用 Windows 窗体 DataGridView 控件的按钮列中的按钮
查看>>
张小龙——谈移动互联网的产品观
查看>>
Android 饼图绘制
查看>>
Android SurfaceView概述
查看>>
at android.view.Surface.unlockCanvasAndPost(Native Method)
查看>>
[LeetCode] Convert Sorted List to Binary Search Tree DFS,深度搜索
查看>>
VS2010下开发WebApi 基本步骤
查看>>
WPF 外发光效果
查看>>
Less主要用法
查看>>
定时器
查看>>
js 字符串拼接 html 累加 html 叠加
查看>>
Android启动页面实现版本检查更新
查看>>
如何在ASP.NET MVC 中获取当前URL、controller、action
查看>>
Freemarket语法
查看>>
Windows7系统中怎么Ping端口?利用telnet命令Ping 端口的方法
查看>>
摩客、墨刀、axure,原型设计工具哪个好用?
查看>>