富翁 [组合计数]

富翁


color{red}{正解部分}

先把 100,50100, 50 变成 2,12, 1, 不会影响答案 .

枚举最后持有 奇数 的人有 ii 个, 总钱数为 3M3M,
把所有 奇数 减去 11, 总钱数变为 3Mi3M - i, 而剩下的人的财产均为 偶数,
n1=3Mi2n_1 = frac{3M-i}{2}, 把 n1n_1 分给 nn 个人的方案数量(允许有人没钱) 即为对答案的贡献,
(ni)(n1+n1n1)egin{pmatrix} n \ iend{pmatrix}egin{pmatrix} n_1+n-1 \ n-1 end{pmatrix},

但是钱数最多的人最多持有 2M2M 的钱, 还需减去不合法的方案,

先减去 大于等于 2M2M 的方案数, 先固定一个人至少拥有 2M2M 的钱, 设 n2=Mi2n_2 = frac{M-i}{2},
方案数为: n(ni)(n2+n1n1)n egin{pmatrix}n \ iend{pmatrix} egin{pmatrix} n_2+n-1 \ n-1 end{pmatrix} .

还要加上存在 等于 2M2M 的方案数, (ni)(ni)(n2+n2n2)(n-i) egin{pmatrix}n \ iend{pmatrix}egin{pmatrix} n_2+n-2 \ n-2 end{pmatrix} .

(ni)(n1+n1n1)n(ni)(n2+n1n1)+(ni)(ni)(n2+n2n2) herefore 总方案数为egin{pmatrix} n \ iend{pmatrix}egin{pmatrix} n_1+n-1 \ n-1 end{pmatrix} - n egin{pmatrix}n \ iend{pmatrix} egin{pmatrix} n_2+n-1 \ n-1 end{pmatrix} + (n-i) egin{pmatrix}n \ iend{pmatrix}egin{pmatrix} n_2+n-2 \ n-2 end{pmatrix}


color{red}{实现部分}

  • MM奇数 时, 才可能出现仅有 11奇数 的情况 .
  • 固定一个人拥有 2M2M 时, iN1i le N-1 .
#include<bits/stdc++.h>
#define reg register

const int maxn = 3e7 + 5;
const int mod = 998244353;


int N;
int M;
int Ans;
int fac[maxn];
int inv[maxn];
int ifac[maxn];

int C(int n, int m){ if(n < m) return 0; return 1ll*fac[n]*ifac[m]%mod*ifac[n-m]%mod; }

int main(){
        fac[0] = 1; for(reg int i = 1; i < maxn; i ++) fac[i] = 1ll*fac[i-1]*i % mod;
        inv[1] = 1; for(reg int i = 2; i < maxn; i ++) inv[i] = ((-1ll*mod/i*inv[mod%i])%mod + mod)%mod;
        ifac[0] = 1; for(reg int i = 1; i < maxn; i ++) ifac[i] = 1ll*ifac[i-1]*inv[i] % mod;
        scanf("%d%d", &N, &M); int lim = std::min(N, M);
        for(reg int i = (M&1); i <= lim; i += 2){
                int n1 = (M*3-i)/2, n2 = (M-i)/2;
                Ans = (Ans + 1ll*C(N, i)*C(n1+N-1, N-1)%mod) % mod;
                Ans = ((Ans - 1ll*N*C(N, i)%mod*C(n2+N-1, N-1)%mod) + mod) % mod;
                Ans = (Ans + 1ll*(N-i)*C(N, i)%mod*C(n2+N-2, N-2)%mod) % mod; //
        }
        printf("%d
", Ans);
        return 0;
}
原文地址:https://www.cnblogs.com/zbr162/p/11822434.html