jzoj4819 算循环
来源:互联网 发布:姚明职业生涯平均数据 编辑:程序博客网 时间:2024/06/05 02:52
首先那个程序是送给你的40分暴力.
先看一下他题意中的题意,我们发现答案其实等于这个式子
Ans=∑i∑jij(n−i+1)(m−j+1)
就相当于对于一个点(i,j),包括他的矩阵有(n-i+1)(m-j+1)种.
然后我们做一下变形
Ans=(∑i(n−i+1)i)∗(∑jj(m−j+1))
发现这是两个形式完全相同的式子. 到了这一步我们就可以O(n)得到80分了.
所以我们就可以考虑如何求
F(i)=∑i(n−i+1)i
将式子进行变形,得到
F(i)=(n−1)∑ii−∑ii2
然后我们有平方和式子
∑ii2=n(n+1)(2n+1)/6
别问我怎么证明的,我也不知道
然后就可以O(1)求了.
#include <cstdio>#include <iostream>#define MO 1000000007#define sg(x) ((1+(x))*(x)/2%MO)using namespace std;long long n,m,ans;long long sqrtSum(long long n) { return n*(n+1)%MO*(2*n+1)%MO*166666668%MO;}long long cnt(long long x) { return (MO+(x+1)*sg(x)%MO-sqrtSum(x))%MO;}int main() { freopen("loop.in","r",stdin); freopen("loop.out","w",stdout); cin>>n>>m; n%=MO; m%=MO; cout<<cnt(m)*cnt(n)%MO<<endl;}
1 0
- 【JZOJ4819】算循环
- jzoj4819 算循环
- 【JZOJ4819】【NOIP2016提高A组模拟10.15】算循环
- JZOJ4819. 【NOIP2016提高A组模拟10.15】算循环
- 【NOIP模拟】算循环
- 循环累加远算
- 循环
- 循环
- 循环
- 循环
- 循环
- 循环
- 循环
- 循环
- 循环
- 循环
- 循环
- 循环
- Intent Flag启动模式
- C语言代码4(求最大公约数)
- Redis 主从 Replication 的配置
- JZOJ 4821. 【NOIP2016提高A组模拟10.15】打膈膜
- JAVA代码执行顺序
- jzoj4819 算循环
- HDOJ 4642 Fliping game
- iBatis2学习笔记:SqlMap的配置总结(18条)
- android绘制实心圆、空心圆
- Redis Sentinel机制与用法(一)
- VS2008调试技术
- HDU ACM 11 2040 亲和数
- wamp 的Redis 环境搭建以及phpredis扩展
- UVA 11996 Splay + LCP + Hash + 区间翻转 插入 删除