题解 | #擅长解密的小红同学#

擅长解密的小红同学

https://ac.nowcoder.com/acm/contest/32282/A

【擅长解密的小红同学】

设密码有NN中可能,那么每次猜中的概率为: P=1NP=\frac{1}{N}

那么,猜了kk次猜中的概率为: P(X=k)=(1P)k1PP(X=k)=(1-P)^{k-1}P,即前k1k-1次都没猜中,而第kk次猜中。

则,期望为:

E[X]=k1kP(X=k)=k1k(1P)k1P\mathbb{E}[X]=\sum_{k\ge 1}k\cdot P(X=k)=\sum_{k\ge 1}k\cdot (1-P)^{k-1}P

又因:

k1kxk1=(0xk1ktk1dt)=(k1xk)=(x1x)=1(1x)2\sum_{k\ge 1}k\cdot x^{k-1}=(\int _{0}^{x}\sum_{k\ge 1}k\cdot t^{k-1}dt)'=(\sum_{k\ge 1}x^k)'=(\frac{x}{1-x})'=\frac{1}{(1-x)^2}

将期望的式子化简:

E[X]=1(1(1P))2P=1P=N\mathbb{E}[X]=\frac{1}{(1-(1-P))^2}P=\frac{1}{P}=N

其中NN的值为:

N=(i=1na[i]a[1],a[2],..,a[n])=(i=1na[i])!i=1n(a[i]!)N=\binom{\sum_{i=1}^na[i]}{a[1],a[2],..,a[n]}=\frac{(\sum_{i=1}^na[i])!}{\prod_{i=1}^n(a[i]!)}
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int mod = 1e9 + 7;
const int N = 1e7 + 10;

ll power(ll a, ll b) {
    ll res = 1;
    while (b) {
        if (b & 1) res = res * a % mod;
        b >>= 1;
        a = a * a % mod;
    }
    return res;
}

int a[10];
ll sum = 0, fac[N];
int main() {
    for (int i = 0; i < 10; i++) {
        cin >> a[i];
        sum += a[i];
    }
    // 预处理阶乘
    fac[0] = 1;
    for (int i = 1; i <= N - 10; i++) fac[i] = i * fac[i - 1] % mod;

    ll res = fac[sum];
    for (int i = 0; i < 10; i++) res = res * power(fac[a[i]], mod - 2) % mod;

    cout << res;
    return 0;
}
全部评论

相关推荐

牛客717484937号:双飞硕没实习挺要命的
点赞 评论 收藏
分享
11-08 10:39
门头沟学院 C++
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务