题目描述

输入

输出

样例输入

167 198

样例输出

906462341

数据范围

解法

令f(n)=∑ni=1i,g(n)=∑ni=1i2

易得ans=∑ni=1∑mj=1f(n−i+1)∗f(m−j+1)

等价于ans=∑ni=1∑mj=1f(i)∗f(j)

显然f(n)=n∗(n−1)/2;

拆开得ans=14∑ni=1∑mj=1i∗(i+1)∗j∗(j+1)

再得

ans=14∑i=1ni∗(i+1)∗∑j=1mj∗(j+1)=14∑i=1n∗(f(i)+g(i))∗∑j=1m∗(f(j)+g(j))

其中g(n)=16n(n+1)(2n+1)


时间复杂度为O(log),逆元有复杂度。

代码

  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<math.h>
  4. #include<string.h>
  5. #include<algorithm>
  6. #define ll long long
  7. #define ln(x,y) ll(log(x)/log(y))
  8. #define sqr(x) ((x)*(x))
  9. using namespace std;
  10. const char* fin="loop.in";
  11. const char* fout="loop.out";
  12. const ll inf=0x7fffffff;
  13. const ll mo=1000000007;
  14. ll n,m,i,j,k,l,tmp,tmd,num,ans;
  15. ll qpower(ll a,ll b){
  16. ll c=1;
  17. while (b){
  18. if (b&1) c=a*c%mo;
  19. a=a*a%mo;
  20. b>>=1;
  21. }
  22. return c;
  23. }
  24. ll N(int a){
  25. return qpower(a,mo-2);
  26. }
  27. ll sum(ll st,ll num){
  28. st%=mo;
  29. num%=mo;
  30. ll en=(st+num-1)%mo;
  31. return (st+en)%mo*num%mo*N(2)%mo;
  32. }
  33. ll xsum(ll n){
  34. n%=mo;
  35. return n*(n+1)%mo*(2*n+1)%mo*N(6)%mo;
  36. }
  37. ll count(ll v){
  38. return (sum(1,v)+xsum(v))%mo;
  39. }
  40. int main(){
  41. freopen(fin,"r",stdin);
  42. freopen(fout,"w",stdout);
  43. scanf("%lld%lld",&n,&m);
  44. ans=count(n)*count(m)%mo*N(4)%mo;
  45. printf("%lld",ans);
  46. return 0;
  47. }

启发

∑的运算性质

1.∑(a+b)=∑a+∑b

2.∑a∑ba∗b=∑aa∗∑bb

3.∑ik∗f(i)=k∗∑f(i)

∑ni=1i2公式

∑ni=1i2=16n(n+1)(2n+1)

证明:

利用数学归纳法检验。

设g(n)=∑ni=1i2;

先有

g(1)=16∗1∗2∗3=1=∑i=1ni2

如果g(x)满足g(x)=16x(x+1)(2x+1);

g(x+1)=16x(x+1)(2x+1)+(x+1)2=16(x+1)(6x+6+x(2x+1))=16(x+1)(2x2+7x+6)=16(x+1)(x+2)(2x+3)=16(x+1)[(x+1)+1][2(x+1)+1]

综上得证。

【JZOJ4819】【NOIP2016提高A组模拟10.15】算循环的更多相关文章

  1. 【NOIP2016提高A组模拟10.15】最大化

    题目 分析 枚举两个纵坐标i.j,接着表示枚举区域的上下边界, 设对于每个横坐标区域的前缀和和为\(s_l\),枚举k, 显然当\(s_k>s_l\)时,以(i,k)为左上角,(j,k)为右下角 ...

  2. 【JZOJ4820】【NOIP2016提高A组模拟10.15】最大化

    题目描述 输入 输出 样例输入 3 2 4 0 -10 8 -2 -2 样例输出 4 数据范围 解法 枚举两条扫描线,在这两条扫描线之间的矩阵,可以将之转化为一个序列b[i]=a[i][1..m]. ...

  3. NOIP2016提高A组模拟10.15总结

    第一题,就是将原有的式子一步步简化,不过有点麻烦,搞了很久. 第二题,枚举上下边界,维护一个单调队列,二分. 比赛上没有想到,只打了个暴力,坑了80分. 第三题,贪心,最后的十多分钟才想到,没有打出来 ...

  4. 【NOIP2016提高A组模拟10.15】打膈膜

    题目 分析 贪心, 先将怪物按生命值从小到大排序(显然按这个顺序打是最优的) 枚举可以发对少次群体攻击, 首先将所有的群体攻击发出去, 然后一个一个怪物打,当当前怪物生命值大于2,如果还有魔法值就放重 ...

  5. 【NOIP2016提高A组模拟10.15】算循环

    题目 分析 一步步删掉循环, 首先,原式是\[\sum_{i=1}^n\sum_{j=1}^m\sum_{k=i}^n\sum_{l=j}^m\sum_{p=i}^k\sum_{q=j}^l1\] 删 ...

  6. 【NOIP2016提高A组模拟9.15】Osu

    题目 分析 考虑二分答案, 二分小数显然是不可取的,那么我们将所有可能的答案求出来,记录在一个数组上,排个序(C++调用函数很容易超时,手打快排,时间复杂度约为\(O(>8*10^7)\),但相 ...

  7. 【NOIP2016提高A组模拟8.15】Garden

    题目 分析 其实原题就是[cqoi2012][bzoj2669]局部极小值. 有一个n行m列的整数矩阵,其中1到nm之间的每个整数恰好出现一次.如果一个格子比所有相邻格子(相邻是指有公共边或公共顶点) ...

  8. 【JZOJ4784】【NOIP2016提高A组模拟9.15】Map

    题目描述 输入 输出 样例输入 4 4 2 1 2 2 3 3 2 3 4 1 2 1 4 样例输出 14 数据范围 样例解释 upd:保证原图连通. "不相交路径"的定义为不存在 ...

  9. 【NOIP2016提高A组模拟9.15】Map

    题目 分析 发现,当原图是一棵树的时候,那么新建一条边后,就会变成环套树, 而环内的所有点对都是安全点对,如果环中有k个点,答案就是\(k(k-1)\) 联想到,当把原图做一遍tarjan缩点,每个环 ...

随机推荐

  1. 引爆潮流技术 Vue+Django REST framework打造生鲜电商项目

    引爆潮流技术Vue+Django REST framework打造生鲜电商项目 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受, ...

  2. MATLAB---fopen、fprintf函数

    1 概述 fopen()是个将数据按指定格式读入到matlab中的函数. fprintf()是个将数据按指定格式写入到文本文件中的函数. 2 用法 2.1 fopen函数 matlab中fopen函数 ...

  3. Nginx与PHP工作原理

    Nginx的工作原理 1.Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location bl ...

  4. Linux中单引号与双引号区别

    1. 单引号内的所有字符都保持它本身字符的意思,而不会被bash进行解释,echo -e时转义字符(\n,\t等)将被解释,如echo -e 'aa\naa'将是两行aa. 2.除了$.``(不是单引 ...

  5. Theano入门——CIFAR-10和CIFAR-100数据集

    Theano入门——CIFAR-10和CIFAR-100数据集 1.CIFAR-10数据集介绍 CIFAR-10数据集包含60000个32*32的彩色图像,共有10类.有50000个训练图像和1000 ...

  6. UVA11613 Acme Corproation

    UVA11613 Acme Corproation 生产销售计划 题目大意 A公司生产一种元素,给出该元素在未来M个月中每个月的单位售价,最大生产量,生产成本,最大销售量和最大存储时间,和每月存储代价 ...

  7. Django项目:CRM(客户关系管理系统)--18--10PerfectCRM实现King_admin日期优化

    #kingadmin_tags.py # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理———————— # # 因为前端禁止使用下划线开头(_meta.ve ...

  8. 20190716-T3-奇袭

    我要嗝了 我经过一系列努力,寻找了一系列,各种复杂度的方法. 1>纯暴力 复杂度:$\Theta(N^5)$ 不多解释,上代码: 空间复杂度无法承受,如果考试偏要写这个不妨动态开数组: 例: # ...

  9. python twisted 的定时调用带参的函数

    无参情况:lc = task.LoopingCall(fun)如果fun带有参数,可以使用functools.partial传递 (fun2 = partial(fun, param1,[...]) ...

  10. Color the ball HDU - 1556 (线段树)

    思路:线段树,区间更新 #include<iostream> #include<vector> #include<string> #include<cmath ...