General
 
 
# Author Problem Lang Verdict Time Memory Sent Judged  
188406328 Practice:
DaiRuiChen007
1513E - 58 C++14 (GCC 6-32) Accepted 109 ms 6436 KB 2023-01-08 12:59:07 2023-01-08 12:59:07
→ Source
// LUOGU_RID: 99047428
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=1e5+1,MOD=1e9+7;
inline int ksm(int a,int b=MOD-2,int m=MOD) {
	int ret=1;
	while(b) {
		if(b&1) ret=ret*a%MOD;
		a=a*a%MOD;
		b=b>>1;
 	}
 	return ret;
}
int a[MAXN],fac[MAXN],inv[MAXN];
map <int,int> cnt;
inline int binom(int n,int m) {
	return fac[n]*inv[m]%MOD*inv[n-m]%MOD;
}
signed main() {
	int n,sum=0;
	scanf("%lld",&n);
	fac[0]=inv[0]=1;
	for(int i=1;i<=n;++i) fac[i]=fac[i-1]*i%MOD,inv[i]=ksm(fac[i]);
	for(int i=1;i<=n;++i) {
		scanf("%lld",&a[i]);
		sum+=a[i];
	}
	if(sum%n!=0) {
		puts("0");
		return 0;
	}
	int avr=sum/n,S=0,T=0;
	for(int i=1;i<=n;++i) {
		++cnt[a[i]];
		if(a[i]>avr) ++S;
		if(a[i]<avr) ++T;
	}
	if(S==0&&T==0) {
		puts("1");
		return 0;
	}
	if(S==1||T==1) {
		int ans=fac[n];
		for(auto p:cnt) ans=ans*inv[p.second]%MOD;
		printf("%lld\n",ans);
		return 0;
	}
	int s=fac[S],t=fac[T];
	for(auto p:cnt) {
		int x=p.first,tot=p.second;
		if(x>avr) s=s*inv[tot]%MOD;
		if(x<avr) t=t*inv[tot]%MOD;
	}
	printf("%lld\n",2*s*t%MOD*binom(n,S+T)%MOD);
	return 0;
}
?
Time: ? ms, memory: ? KB
Verdict: ?
Input
?
Participant's output
?
Jury's answer
?
Checker comment
?
Diagnostics
?
Click to see test details