家人们,大样例过不了啊,我怀疑是取模的问题。有没有神犇帮忙看一看代码
#include<iostream>
#include<cstring>
#include<algorithm>
#define M 1000000007
using namespace std;
long long num[16000],Count[16000];
bool sign[16000];
long long factorial(int n)
{
long long m = 1;
for (int i = 1; i <= n; i++){
m *= i;
}
return m;
}
long long C(int n, int m)
{
return factorial(n) / (factorial(m)*factorial(n - m))%M;
}
int main()
{
//freopen("P3799_4.in","r",stdin);
long long n,x,cnt=0,ans=0,z,fund,y;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x;
if(!num[x]) Count[++cnt]=x;
num[x]++;
}
sort(Count+1,Count+cnt+1);
for(int i=1;i<=cnt;i++)
{
x=Count[i];
if(num[x]>=2)
{
fund=C(num[x],2);
memset(sign,0,sizeof(sign));
for(int j=1;j<=i;j++)
{
y=Count[j];
z=x-y;
if(sign[z]||sign[y]) continue;
if(num[z]&&num[y]&&z!=y)
{
sign[z]=sign[y]=1;
ans+=num[z]*num[y]*fund;
ans%=M;
}
else if(num[z]&&num[y]&&z==y)
{
sign[z]=sign[y]=1;
ans+=C(num[z],2)*fund;
ans%=M;
}
}
}
}
cout<<ans;
}
/*
8
4 3 3 3 2 2 1 1
*/