题目描述

输入

输出

样例输入

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),逆元有复杂度。

代码

#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#define ll long long
#define ln(x,y) ll(log(x)/log(y))
#define sqr(x) ((x)*(x))
using namespace std;
const char* fin="loop.in";
const char* fout="loop.out";
const ll inf=0x7fffffff;
const ll mo=1000000007;
ll n,m,i,j,k,l,tmp,tmd,num,ans;
ll qpower(ll a,ll b){
ll c=1;
while (b){
if (b&1) c=a*c%mo;
a=a*a%mo;
b>>=1;
}
return c;
}
ll N(int a){
return qpower(a,mo-2);
}
ll sum(ll st,ll num){
st%=mo;
num%=mo;
ll en=(st+num-1)%mo;
return (st+en)%mo*num%mo*N(2)%mo;
}
ll xsum(ll n){
n%=mo;
return n*(n+1)%mo*(2*n+1)%mo*N(6)%mo;
}
ll count(ll v){
return (sum(1,v)+xsum(v))%mo;
}
int main(){
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
scanf("%lld%lld",&n,&m);
ans=count(n)*count(m)%mo*N(4)%mo;
printf("%lld",ans);
return 0;
}

启发

∑的运算性质

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. java基础之单例模式

    单列模式: 单例模式指的是一个类只能有一个实例,这样的类被称为单例类,或者单态类,即Singleton Class 单例类的特点 单例类只可有一个实例 它必须自己创立这唯一的一个实例 它必须给所有其它 ...

  2. 解决C++ builder 4.0编译后的程序在某些计算机上运行出现"EAccessViolation" 的错误

    1. bordbk41.dll is missing or not registered. regsvr32 "C:\Program Files (x86)\Common Files\Bor ...

  3. python 字符串的处理技巧--join

    >>> '+'.join('1234')'1+2+3+4'>>> '+'.join(a for a in '1234')'1+2+3+4'>>> ...

  4. iframe调用父页面各种方法

    HTML: <body>    <form id="form1" runat="server">       <div> & ...

  5. oracle function学习1

    oracle function学习基层: 函数就是一个有返回值的过程.  首先 知道oracle 使用限制:      函数调用限制: 1. SQL语句中只能调用存储函数(服务器端),而不能调用客户端 ...

  6. 2018-2-13-C#-相对路径转绝对路径

    title author date CreateTime categories C# 相对路径转绝对路径 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17:23 ...

  7. Leetcode49. Group Anagrams字母异位词分组

    给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...

  8. Hibernate:**not found while looking for property: id https://blog.csdn.net/weixin_43827144/article/details/88935334

    https://blog.csdn.net/weixin_43827144/article/details/88935334 在程序执行时可能会报找不到属性的错误:例如:class Student n ...

  9. 注解2 --- 自定义 Annotation --- 技术搬运工(尚硅谷)

    定义新的 Annotation 类型使用 @interface 关键字 自定义注解自动继承了java.lang.annotation.Annotation接口 Annotation 的成员变量在 An ...

  10. 2017年浙工大迎新赛热身赛 A 毕业设计选题 【结构体排序】

    时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 65536K,其他语言131072K64bit IO Format: %lld 题目描述 又到了一年一度,大四老学长们毕业设计选题的时候, ...