AC代码:
#include <bits/stdc++.h>
using namespace std;
#define N 5000
typedef long long ll;
const ll MOD=1e9+7;
int main()
{
ll a[N+5]={0},b[N+5]={0},n,x,m=0,ans=0;
scanf("%lld",&n);
for (int i=0;i<n;i++) scanf("%lld",&x),a[x]++,m=max(m,x);
for (int i=2;i<=m;i++)
{
if (a[i]<2) continue;
ll tmp=a[i]*(a[i]-1)/2%MOD;
for(int j=1;j<=i/2;j++)
{
if (j!=i-j) ans+=tmp*a[j]*a[i-j];
else if (a[j]>=2) ans+=tmp*a[j]*(a[j]-1)/2;
ans%=MOD;
}
}
printf("%lld\n",ans);
}
内层循环改成下面这样后会WA:
for(int j=1;j<i/2;j++)
ans+=tmp*a[j]*a[i-j],ans%=MOD;
int j=i/2;
if (2*j==i&&a[j]>=2) ans+=tmp*a[j]*(a[j]-1)/2,ans%=MOD;
感觉应该是等价的,但下面的WA了,求助为什么