Problem Description
在数学运算中经常要计算连续的和。例如:计算1+2+...+n,或者等比数列a+a^2+...+a^n。这些和式通常不能够逐项完全写出,使用省略号来辅助表示也不够简洁,所以我们使用求和号"∑"来表示这类连续的和。通常在"∑"的下方标自变量名称和初始值,在"∑"的上方标终止值,而在"∑"的右方写表达式。
求和号"∑"也可以嵌套使用,例如:
3 2
∑ ∑aibj=a1b1+a1b2+a2b1+a2b2+a3b1+a3b2
i=1j=1
你大概已经明白求和号的含义了,现在请计算
n m
∑ ∑aibj
i=1j=1
求和号"∑"也可以嵌套使用,例如:
3 2
∑ ∑aibj=a1b1+a1b2+a2b1+a2b2+a3b1+a3b2
i=1j=1
你大概已经明白求和号的含义了,现在请计算
n m
∑ ∑aibj
i=1j=1
Input
输入有多组数据,对于每组数据第1行有两个整数,n和m。以下从第2行到第n+1行,每行包含一个整数,第i+1行表示ai的值。紧接着从第n+2行到n+m+1行,每行包含一个整数,第j+n+1行表示bj的值。
Output
对于每组数据输出一行包含一个整数即你计算得到的答案。
Sample Input
3 2 1 2 3 5 7
Sample Output
72
Author
#include<iostream>
#include<malloc.h>
#include<cstdio>
using namespace std;
int main()
{
int *a,b,i,j,n,m;
__int64 s,sum=0;
while(scanf("%d%d",&n,&m)!=EOF)
{
s=0; sum=0;
a=(int *)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
scanf("%d",a+i);
for(j=0;j<m;j++)
{ //为了运算不超时,先将b数组的和算出来,再用a数组每一个数和乘b数组的和
scanf("%d",&b);
sum+=b;//a1*(b1+b2+..+bn)+a2(b1+b2+..+bn)+...
}
for(i=0;i<n;i++)
s+=a[i]*sum;
printf("%I64d\n",s);
free(a);
}
return 0;
}