题目来源:H-牛牛看云_2022牛客寒假算法基础集训营1 (nowcoder.com)
题目大意:给定n,和一个长度为n的数列,求:
该式子的值
解题思路:
直接算肯定会T,观察到ai比较小,而n非常大,也就是一个测试样例中当n很大时会有大量重复计算,想办法优化这一堆计算让他只算一次,优化方法:开个桶存每个数出现的次数,就可以将加法改成乘法计算
AC代码:
#include<bits/stdc++.h>
using namespace std;
long long int cnt[1010]={0};
int main()
{
long long int n;
scanf("%lld",&n);
// memset(cnt,0,sizeof(cnt));
for(int i=1;i<=n;i++)
{
int temp;
cin>>temp;
cnt[temp]++;
}
long long int sum=0;
for(int i=0;i<=1010;i++)
for(int j=i;j<=1010;j++)
sum+=abs(i+j-1000)*(i==j?((cnt[i]*cnt[i]+cnt[i])/2):cnt[i]*cnt[j]);
cout<<sum<<endl;
return 0;
}