软件工程今日总结
第六天
四个小时
300
include<bits/stdc++.h>
using namespace std;
int main()
{
long long n,i,j,k=0,sum=0;
cin>>n;
long long a[n],b[n];
for(i=0;i<n;i++)
{
cin>>a[i];
b[i]=a[i];
}
for(i=0;i<n;i++)
{
k=k+b[i];
}
for(i=0;i<n;i++)
{
k=k-a[i];
sum=sum+a[i]*k;
}
cout<<sum;
return 0;
}
这是一个两两相乘再相加的题,一眼看去感觉很简单的题
这样我们很容易写成这样
include <bits/stdc++.h>
using namespace std;
int n;
int a[200010];
int sum=0;
int main()
{
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
sum+=a[i]*a[j];
}
}
cout<<sum<<endl;
return 0;
}
但是在时间复杂度上我们发现不符合题目要求,运行的太慢;
所以我们根据一个前缀和的算法将代码改成了这样

浙公网安备 33010602011771号