RT,code 和思路见下方
#include <iostream>
#include <algorithm>
#define N 100010
#define M 5010
using namespace std;
const long long mod=1000000007;
long long x,p1,p2,p3,vis[M],n,mmin,mmax,ans;
int main(){
ios::sync_with_stdio(false);
cin>>n;
cin>>x;
vis[x]++;
mmin=x;
mmax=x;
for(int i=2;i<=n;i++){
cin>>x;
vis[x]++;
mmin=mmin<x?mmin:x;
mmax=mmax>x?mmax:x;
}
for(int i=mmin+1;i<=mmax;i++){
if(vis[i]>=2){
p3=vis[i]*(vis[i]-1)/2;
for(int j=mmin;j<=i-j;j++){
p1=vis[j];
p2=vis[i-j];
if(p1==0||p2==0)
continue;
if(j==i-j)
ans+=(p1*(p1-1)/2*p3)%mod;
else
if(p1+p2<2)
continue;
else
ans+=(p1*p2*p3)%mod;
}
ans=ans%mod;
}
}
cout<<ans;
return 0;
}
去题解看了一下,发现发题解的大佬们思路和我都差不多,自己不知道为什么错了,求大佬们指正。谢谢!