1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| #include <bits/stdc++.h> using namespace std; using ll = long long;
const int maxn = 1e6 + 50; const int mod = 998244353;
int n; int a[maxn]; ll fac[maxn]; ll inv[maxn];
ll qpow( ll base, ll k ) { ll res = 1; base %= mod; while( k ) { if( k & 1 ) res = ( res * base ) % mod; base = ( base * base ) % mod; k >>= 1; } return res; }
void init( ) { fac[0] = 1; for( int i = 1; i < maxn; ++ i ) fac[i] = ( fac[i-1] * i ) % mod; inv[maxn - 1] = qpow( fac[maxn - 1], mod - 2 ); for( int i = maxn - 2; i >= 0; -- i ) inv[i] = ( inv[i + 1] * ( i + 1 ) ) % mod; }
ll per( int n, int r ) { return ( fac[n] * inv[n - r] ) % mod; }
void solve( ) { cin >> n; ll sum = 0; for( int i = 0; i <= n; ++ i ) { cin >> a[i]; sum += a[i]; } ll q = sum / n; int r = sum % n;
int cnt = 0; for( int i = 1; i <= n; ++ i ) { if( a[i] > q + 1 ) { cout << 0 << '\n'; return; } if( a[i] == q + 1 ) cnt ++; }
ll res = per( r, cnt ); res = ( res * fac[n - cnt] ) % mod; cout << res << '\n'; }
int main( ) { init( ); int _t = 1; cin >> _t; while( _t -- ) { solve( ); } return 0; }
|