30分求助
查看原帖
30分求助
186278
Saberlve楼主2023/2/23 22:18

家人们,大样例过不了啊,我怀疑是取模的问题。有没有神犇帮忙看一看代码

#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
*/
2023/2/23 22:18
加载中...