题目背景

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

输出格式:

一行一个数

输入输出样例

输入样例#1:

  1. 3 3
输出样例#1:

  1. 300
输入样例#2:

  1. 64 19260817
输出样例#2:

  1. 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(玄学)

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define ha 10007
  4. using namespace std;
  5. struct node{
  6. int a,b,c;
  7. //a表示i^2要乘的系数
  8. //b表示2*i要乘的系数
  9. //c表示∑j^2+k^2+2*k*j
  10. };
  11. int l,r;
  12.  
  13. /*
  14. inline int add(int x,int y){
  15. x+=y;
  16. while(x>=ha) x-=ha;
  17. return x;
  18. }
  19. */
  20.  
  21. inline int c1(int x){
  22. //一次前缀和
  23. return (x*(ll)(x+1)>>1ll)%ha;
  24. }
  25.  
  26. inline int c2(int x){
  27. //二次前缀和
  28. ll now=x*(ll)(x+1)>>1;
  29. if(!(now%3)) return now/3%ha*(ll)(2*x+1)%ha;
  30. else return (ll)(2*x+1)/3*(now%ha)%ha;
  31. }
  32.  
  33. inline node work(int x){
  34. node an=(node){0,0,0};
  35. for(int i=1,j;i<=x;i=j+1){
  36. int now=x/i;
  37. j=x/now;
  38.  
  39. an.a=((ll)an.a+(j-i+1)*(ll)now)%ha;
  40. an.b=((ll)an.b+(ll)(j-i+1)*(ll)c1(now)+(ll)now*(ll)(c1(j)-c1(i-1)+ha))%ha;
  41. 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;
  42. }
  43.  
  44. return an;
  45. }
  46.  
  47. inline int solve(int x){
  48. int an=0;
  49.  
  50. for(int i=1,j;i<=x;i=j+1){
  51. int now=x/i;
  52. j=x/now;
  53.  
  54. node w=work(now);
  55. 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;
  56. }
  57.  
  58. return an;
  59. }
  60.  
  61. int main(){
  62. scanf("%d%d",&l,&r);
  63. int ans=solve(r)-solve(l-1);
  64. if(ans<0) ans+=ha;
  65. ans<<=2;
  66. while(ans>=ha) ans-=ha;
  67.  
  68. printf("%d\n",ans);
  69. return 0;
  70. }

  

洛谷 P3636 曲面的更多相关文章

  1. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  2. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  3. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  4. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  5. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  6. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

  7. 洛谷P1538迎春舞会之数字舞蹈

    题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...

  8. 洛谷八月月赛Round1凄惨记

    个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...

  9. 洛谷 P1379 八数码难题 Label:判重&&bfs

    特别声明:紫书上抄来的代码,详见P198 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给 ...

随机推荐

  1. Python全栈工程师(Linux基本操作)

    ParisGabriel         Python 入门基础        Linux :Ubuntu操作系统   首先我们说的是Linux操作系统常用的快捷键以及终端命令   一. VMware ...

  2. 从今天开始学Python

    外部链接下载吧 1.  Python 3.63.chm   AIP 帮助文档  下载:https://pan.baidu.com/s/1lhpv8JTC3Z7B6aZ3qQi40g 2.  VMwar ...

  3. 孤荷凌寒自学python第二十二天python类的继承

    孤荷凌寒自学python第二十二天python类的继承 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) python中定义的类可以继承自其它类,所谓继承的概念,我的理解 是,就是一个类B继承自 ...

  4. 孤荷凌寒自学python第十六天python的迭代对象

    孤荷凌寒自学python第十六天python的迭代对象 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 迭代也就是循环. python中的迭代对象有相关的如下几个术语: A容器 contrai ...

  5. TensorFlow dataset API 使用

    # TensorFlow dataset API 使用 由于本人感兴趣的是自然语言处理,所以下面有关dataset API 的使用偏向于变长数据的处理. 1. 从迭代器中引入数据 import num ...

  6. vue实现数据的增删改查

    在管理员的一些后台页面里,个人中心里的数据列表里,都会有对这些数据进行增删改查的操作.比如在管理员后台的用户列表里,我们可以录入新用户的信息,也可以对既有的用户信息进行修改.在vue中,我们更应该专注 ...

  7. Android记事本05

    昨天: intentFilter 今天: URL和logcat 问题: ADK更新后无法打开布局文件.xml

  8. 使用IDEA新建Maven项目没有完整的项目结构(src文件夹等等)

    maven还没加载好,右下角还有进度条在从中央仓库读,所以在创建maven项目的时候,需要加archetypeCatalog=internal 右边新增一项 如下图: 此时就可以快速的建立maven项 ...

  9. Android性能优化之避免内存泄漏的建议

    在android程序开发中,内存泄漏问题是比较常见的问题,相信有过一些android编程经历的程序猿都遇到过各种各样的内存泄漏.内存泄漏是造成应用程序OOM的主要原因之一,是编程中必须避免的问题.下面 ...

  10. MPS添加管理设备实例NS的过程

    MPS添加管理设备实例NS的过程 MPS添加实例NS设备节点: > show snmp community Done > > add snmp community public al ...