RE求助
查看原帖
RE求助
302043
ray_catcher楼主2020/8/5 23:59
#include <iostream>
#include <cstdio>
using namespace std;
#define mod 998244353
int n,x,a[200005];
long long ans,C[200005][4],num[200005];
void input();
void work();
void combinatorial_number(int x);
void output();
int main()
{
	input();
	work();
	output();
	return 0;
}
void output()
{
	cout<<ans<<endl;
}
void input()
{
//	freopen("in.txt","r",stdin);
//	freopen("out.txt","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&x);
		a[x]++;
	}	
}
void work()
{
	int maxn=-100;
	for(int i=1;i<=200005;i++)
		maxn=max(a[i],maxn);
	combinatorial_number(maxn);
	for(int i=1;i<=200005;i++)
		num[i]=a[i]+num[i-1];
	for(int i=1;i<=200005;i++)
	{
		if(a[i]>=2)
		{
			ans+=((num[2*i-1]-a[i])*C[a[i]][2])%mod;
			ans%=mod;
			if(a[i]>=3)
				ans+=C[a[i]][3];
			ans%=mod;
		}
	}
}
void combinatorial_number(int x)
{
	for(int i=0;i<=x;i++)
	{
		C[i][0]=C[i][i]=1;
		for(int j=0;j<i;j++)
			C[i][j]=C[i-1][j]+C[i-1][j-1];
	}
	/* 
	for(int i=0;i<=x;i++)
	{
		for(int j=0;j<=i;j++)
			printf("%lld ",C[i][j]);
		cout<<endl;
	}
	*/
	//输出杨辉三角 
}
2020/8/5 23:59
加载中...