蓝桥杯简单编程题
直接双重循环会超时
题解都用的前缀和,这是另一种思路
题目中提到数据范围为1000,但是数据个数为200000,所以一定有重复的数,记录个数直接相乘即可
#include<bits/stdc++.h>
using namespace std;
#define int long long
vector<int>a;
map<int,int>cnt;
signed main()
{
int n,b;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>b;
if(cnt[b]==0)//没出现过则输入
a.push_back(b);
cnt[b]++;//个数增加
}
int sum=0;
for(int i=0;i<a.size()-1;i++)//最多1000
{
for(int j=i+1;j<a.size();j++)//最多1000
{
sum+=a[i]*a[j]*cnt[a[i]]*cnt[a[j]];
}
}
for(int i=0;i<a.size();i++)
sum+=a[i]*a[i]*cnt[a[i]]*(cnt[a[i]]-1)/2;//相同的数相乘
cout<<sum;
return 0;
}