【Smart OJ P2485】Sum of product 简单数学
2015-10-28 19:23
288 查看
描述 Descript.
对于A1,A2,…..,AN,求的值。
输入 Input
第1 行,1 个整数N。第2 行,N 个整数A1,A2,…..,AN。
输出 Output
1 个整数,表示所求的值。样例 Sample
输入数据
[code]3 1 2 3
输出数据
[code]36
备注 Hint
• 对于30% 的数据,3 <= N <= 500;• 对于60% 的数据,3 <= N <= 5000;
• 对于100% 的数据,3 <= N <= 106,0 <= Ai <= 109。
来源 Source
ftiasch 普及组模拟赛 II今天翻出来老题了…
其实就是提公因式,扔底下了。
[code]a1a2a3+a1a2a4+a1a2a5+...+a1a2an+a2… =a1(a2a3+a2a4+…+a2an)+a2… 记sum[i]为原数列的前缀和。 =a1( a2(sum -sum[2]) + a3(sum -sum[3])+ … )+a2… =a1( a2sum + a3sum + a4sum + … - a2sum[2]-a3sum[3]-…-ansum )+a2… =a1( sum[n](sum -sum[1]) - a2sum[2]-a3sum[3]-…-ansum )+a2… 记s[i]为数列{a[i]*sum[i]}的前缀和 =a1( sum[n](sum -sum[1]) –(s -s[1]) )+a2… 于是答案就是: Σa[i]*( sum *(sum -sum[i]) –(s -s[i]) ) 可以O(n)求出sum,s,然后O(n)求出。 一定要多模,不然很有可能溢出。 输出答案可能是负数,请加成正的再模后输出。
代码:
[code]#include<cstdio> #include<iostream> #include<cstdio> #include<algorithm> using namespace std; typedef long long LL; const int SIZE=1000010; const LL mod=1000000007; LL num[SIZE]; LL sum[SIZE]; LL s[SIZE]; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%lld",&num[i]); sum[i]=(sum[i-1]%mod+num[i]%mod)%mod; s[i]=(s[i-1]%mod+(num[i]%mod*sum[i]%mod)%mod)%mod; } LL ans=0; for(int i=1;i<=n;i++) { ans=(ans%mod+(num[i]%mod*( (sum %mod*(sum %mod-sum[i]%mod) %mod)%mod - (s %mod-s[i]%mod)%mod )%mod)%mod)%mod; } printf("%lld",((6ll*ans)%mod+mod)%mod); return 0; } /* g++ prosum.cpp -o prosum.exe -Wall */
相关文章推荐
- HTML5 drag & drop 拖拽与拖放简介
- 《探索需求--设计前的质量》阅读笔记三
- Swing记事本项目
- gulp安装成功但是无法使用
- [LeetCode]题解(python):033-Search in Rotated Sorted Array
- java网络编程介绍与实例
- 文章标题
- 使用Ruby和Twitter来进行数据挖掘
- 欢迎使用CSDN-markdown编辑器
- IO(一)File类
- 概率论中两个易混淆概念(概率分布函数 VS. 概率密度函数)
- hdu3879 最大权闭合回路
- 美味清淡的木耳炒蛋
- 友盟指数
- HDU 1024 Max Sum Plus Plus
- 关于JAVA中HashMap集合的的三种超不好记的便利方案
- android客户端与部署到tomcat的servlet服务器之间实现http通信
- Linux 常用命令
- 习题 1-1:平均数
- Windows 1252和ISO 8859-1之间的区别(ISO 8859-1就是Latin-1,但1252与Latin1略有不同)