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

擅长解密的小红同学

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;
}
全部评论

相关推荐

07-14 13:47
门头沟学院 Java
Lynn012:你评估好自己的位置了吗《顶尖应届》
投递小米集团等公司8个岗位
点赞 评论 收藏
分享
程序员小白条:找的太晚,别人都是大三实习,然后大四秋招春招的,你大四下了才去实习,晚1年
点赞 评论 收藏
分享
头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
昨天 18:09
门头沟学院 Java
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务