乍一看此题很简单,直接想都没想二重循环秒了。但果不其然超时了,只得了30分。
对于 30% 的数据, 1≤�≤1000,1≤��≤1001≤n≤1000,1≤ai≤100 。
对于所有评测用例, 1≤�≤2×105,1≤��≤10001≤n≤2×105,1≤ai≤1000 。
蓝桥杯 2022 省赛 A 组 C 题。
所以只能降低时间复杂度。可以使用前缀和求解。
可以用一个sum数组储存前n项和。直接 ans+=a[i]*(sum[n-1]-sum[i]);就行。
后来又遇到了RE,数组开小了。
#include<bits/stdc++.h>
using namespace std;
#define MAXN 200000
int main()
{
long n;
cin>>n;
long long a[MAXN];
long long sum[MAXN];
long long ans=0;
for(int i=0;i<n;i++){
cin>>a[i];
sum[i]=sum[i-1]+a[i];
}
for(int i=0;i<n-1;i++){
ans+=a[i]*(sum[n-1]-sum[i]);
}
cout<<ans;
return 0;
}