?
# | 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 |
// 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; }
?
?
?
?