为什么写成这样就全WA:
#include<bits/stdc++.h>
using namespace std;
int n,a[5010];
int t;
int main()
{
cin>>n;
int max=0;
for(int i=1;i<=n;++i)
{
cin>>t;
a[t]++;
if(t>max)
{
max=t;
}
}
long long ans=0,res=0;
for(int i=2;i<=max;++i)
{
if(a[i]<2)
{
continue;
}
for(int j=1;j<=i/2;++j)
{
if(i-j==j)
{
if(a[j]>=2)
{
ans+=(a[j]-1)*a[j]/2%1000000007;
ans%=1000000007;
}
}
else
{
if(a[i-j]>=1&&a[j]>=1)
{
ans+=a[j]*a[i-j]%1000000007;
ans%=1000000007;
}
}
}
res+=ans*(a[i]-1)*a[i]/2%1000000007;
res%=1000000007;
}
cout<<res;
return 0;
}
但是这样就能AC:
#include<bits/stdc++.h>
using namespace std;
int n,a[5010];
int t;
int main()
{
cin>>n;
int max=0;
for(int i=1;i<=n;++i)
{
cin>>t;
a[t]++;
if(t>max)
{
max=t;
}
}
long long ans=0,res=0;
for(int i=2;i<=max;++i)
{
if(a[i]<2)
{
continue;
}
for(int j=1;j<=i/2;++j)
{
if(i-j==j)
{
if(a[j]>=2)
{
ans+=(a[j]-1)*a[j]/2%1000000007*(a[i]-1)*a[i]/2%1000000007;
}
}
else
{
if(a[i-j]>=1&&a[j]>=1)
{
ans+=a[j]*a[i-j]%1000000007*(a[i]-1)*a[i]/2%1000000007;
}
}
}
}
ans%=1000000007;
cout<<ans;
return 0;
}
我感觉这两个都一样啊,只是一个每一次i最后一起乘(a[i]-1)a[i]/2,另一个是每一次ans都(a[i]-1)*a[i]/2,为什么第一个就全错