题目链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1983
【中文题意】让你求出所有a[i]*a[j]的和是多少其中i<=j 【思路分析】首先啊,你会发现各项的平方肯定在其中,我们先加上,然后呢,我们用qianzhui[i]代表从第一个数加到第i个数的和,我们会发现第i个数乘以后面所有的数肯定在结果中,这两种情况的结果加起来就是所求的结果了。 【AC代码】
#include<stdio.h> #include<map> #include<string.h> #include<algorithm> #include<hash_map> #include<iostream> using namespace std; #define LL long long int a[100005]; LL qianzhui[100005]; int main() { int n; while(~scanf("%d",&n)) { LL sum=0,x=0; qianzhui[0]=0; //memset(book,0,sizeof(book)); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); sum+=a[i]*a[i]; qianzhui[i]=qianzhui[i-1]+a[i]; x+=a[i]; } LL sum2=0; for(int i=1;i<=n;i++) { sum2+=(x-qianzhui[i])*a[i]; } printf("%lld\n",sum+sum2); } return 0; }