感觉算法没有出问题,但是总是比答案输出大
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdio.h>
using namespace std;
int H[5001], sum,mid;
const int ttr = 1000000000 + 7;
int main()
{
int n,max=0,min=5001; cin >> n;
for (int i = 0,m; i < n; i++)
{
scanf("%d", &m);
max = m > max ? m : max;
min = m < min ? m : min;
H[m]++;
}
for (int i = min; i <= max; i++)
{
if (H[i]>=2)
{
for (int a = 1; a <=i/2; a++)
{
if (H[a]*H[i-a])
{
if (a==i-a&&H[a]>=2)
{
mid =( (H[a] * (H[a] - 1) / 2)%ttr *( H[i] * (H[i] - 1) / 2 )%ttr)% ttr;
}
else
{
mid = ((H[a] * H[i - a]%ttr) * ((H[i] * (H[i] - 1) / 2) % ttr))%ttr;
}
sum += mid;
}
}
}
}
cout << sum%ttr ;
return 0;
}