洛谷 P3636 曲面
题目背景
xht喜欢研究数学函数,他特别喜欢反比例函数。
题目描述
我们知道,反比例函数xy=a的图象是双曲线。

xht于是想:把它推广到三维是什么样的呢?
定义曲面C(k)为方程xyz=k所确定的曲面。
又定义曲面的美观程度P(k)为曲面C(k)上所有整点(x,y,z坐标均为整数)到原点的曼哈顿距离的平方之和。
(点(x,y,z)到原点的曼哈顿距离为|x|+|y|+|z|)。
现在,xht把一些曲面{C(a),C(a+1)...C(b)}排成一列,你要求出它们美观程度之和对10007取模的结果。
输入输出格式
输入格式:
一行两个正整数数a,b
输出格式:
一行一个数
输入输出样例
3 3
300
64 19260817
9932
说明
样例1的解释:
在曲面xyz=3上共有12个整点(1,1,3),(1,3,1),(3,1,1),(-1-1,3),(-1,-3,1),(-3,-1,1),(1,-1,-3),(1,-3,-1),(3,-1,-1),(-1,1,-3),(-1,3,-1),(-3,1,-1)。它们到原点的曼哈顿距离的平方之和为5^2*12=300。
对于20%的数据,a=b<=100
对于另外40%的数据,a,b<=3*10^5
对于100%的数据,1<=a,b<=3*10^8
记得是洛谷的某次上古比赛的题,,当时too young too naive的我只骗了60分hhhh,现在一看貌似也不是那么难了。
但这确实是一道好题。
首先可以只求坐标都是正的的和,然后*4,因为三维乘积要是正的话,必须满足坐标是负数的维数是偶数,所以C(3,0)+C(3,2)=4。
设solve(x)=ΣΣΣ(i+j+k)^2 ,其中i*j*k<=x。
那么答案显然就是(solve(b)-solve(a-1))*4
求solve(x)的时候,我们把括号拆开,转化成 i^2 + 2*i * (j+k) + j^2+k^2+2*j*k。 我们固定i的时候左式就可以拆成三部分求。
考虑到x/i一定的时候,j*k的上界是一定的,而x/i的取值不是很多,而且x/i相等的i都是连续的,这就告诉我们可以数列分块。
内层求j和k的相关值时再套一层分块即可。
时间复杂度 O(玄学)
#include<bits/stdc++.h>
#define ll long long
#define ha 10007
using namespace std;
struct node{
int a,b,c;
//a表示i^2要乘的系数
//b表示2*i要乘的系数
//c表示∑j^2+k^2+2*k*j
};
int l,r; /*
inline int add(int x,int y){
x+=y;
while(x>=ha) x-=ha;
return x;
}
*/ inline int c1(int x){
//一次前缀和
return (x*(ll)(x+1)>>1ll)%ha;
} inline int c2(int x){
//二次前缀和
ll now=x*(ll)(x+1)>>1;
if(!(now%3)) return now/3%ha*(ll)(2*x+1)%ha;
else return (ll)(2*x+1)/3*(now%ha)%ha;
} inline node work(int x){
node an=(node){0,0,0};
for(int i=1,j;i<=x;i=j+1){
int now=x/i;
j=x/now; an.a=((ll)an.a+(j-i+1)*(ll)now)%ha;
an.b=((ll)an.b+(ll)(j-i+1)*(ll)c1(now)+(ll)now*(ll)(c1(j)-c1(i-1)+ha))%ha;
an.c=((ll)an.c+(ll)(c1(now)*(ll)(c1(j)-c1(i-1)+ha)<<1ll)+(ll)(c2(j)-c2(i-1)+ha)*(ll)now+(ll)c2(now)*(ll)(j-i+1))%ha;
} return an;
} inline int solve(int x){
int an=0; for(int i=1,j;i<=x;i=j+1){
int now=x/i;
j=x/now; node w=work(now);
an=((ll)an+(ll)(j-i+1)*(ll)w.c+(ll)((c1(j)-c1(i-1)+ha)<<1ll)*(ll)w.b+(ll)(c2(j)-c2(i-1)+ha)*(ll)w.a)%ha;
} return an;
} int main(){
scanf("%d%d",&l,&r);
int ans=solve(r)-solve(l-1);
if(ans<0) ans+=ha;
ans<<=2;
while(ans>=ha) ans-=ha; printf("%d\n",ans);
return 0;
}
洛谷 P3636 曲面的更多相关文章
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷P1710 地铁涨价
P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交 讨论 题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...
- 洛谷P1371 NOI元丹
P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交 讨论 题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...
- 洛谷P1538迎春舞会之数字舞蹈
题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...
- 洛谷八月月赛Round1凄惨记
个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...
- 洛谷 P1379 八数码难题 Label:判重&&bfs
特别声明:紫书上抄来的代码,详见P198 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给 ...
随机推荐
- springboot相关链接
springboot的三种启动方式 https://blog.csdn.net/my__Sun_/article/details/72866329 springboot学历历程 https://www ...
- 5.修改haproxy配置文件
需求: 1.查 输入:www.oldboy.org 获取当前backend下的所有记录 2.新建 输入: arg = { 'backend': 'www.oldboy.org', 'record':{ ...
- linux ubuntu开启sshd
which ssh #查看文件 sudo apt-get install ssh #安装ssh cd /etc/init.d #切换目录 ls -l | grep ssh #执行启动脚本 sudo s ...
- [转]LVS+Keepalived负载均衡配置
简介 来源:https://www.cnblogs.com/MacoLee/p/5858995.html lvs一般是和keepalived一起组合使用的,虽然也可以单独使用lvs,但配置比较繁琐,且 ...
- 解方程 sqrt(x-sqrt(n))+sqrt(y)-sqrt(z)=0的所有自然数解
解方程 小象同学在初等教育时期遇到了一个复杂的数学题,题目是这样的: 给定自然数 nn,确定关于 x, y, zx,y,z 的不定方程 \displaystyle \sqrt{x - \sqrt{n} ...
- HDU 4262 Juggler 树状数组
将每个球按输入顺序编号,建立 它第几个被扔掉->编号 的映射关系. 记录当前在手里的球的编号,按扔掉的顺序查找这个球的编号,看看这个球是逆时针转到手里更近还是顺时针转到手里更近,即当前扔掉球的编 ...
- ci重写 配置文件
server { listen 80; #listen [::]:80; server_name wangyongshun.xyz www.wangyongshun.xyz; index index. ...
- nodejs & docker
nodejs & docker https://github.com/xgqfrms-GitHub/Node.js/blob/master/Docker-Nodejs/translation. ...
- [poj] 3977 Subset || 折半搜索MITM
原题 给定N个整数组成的数列(N<=35),从中选出一个子集,使得这个子集的所有元素的值的和的绝对值最小,如果有多组数据满足的话,选择子集元素最少的那个. n<=35,所以双向dfs的O( ...
- yum升级kernel
# uname -a Linux host -.el6.x86_64 # SMP Fri May :: BST x86_64 x86_64 x86_64 GNU/Linux # cat /etc/re ...