0
点赞
收藏
分享

微信扫一扫

GDUT-2022 趣味题1 牛牛看云

天际孤狼 2022-02-27 阅读 95
算法

题目来源: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;
}

举报

相关推荐

0 条评论