题解 | #擅长解密的小红同学#
擅长解密的小红同学
https://ac.nowcoder.com/acm/contest/32282/A
【擅长解密的小红同学】
设密码有中可能,那么每次猜中的概率为:
那么,猜了次猜中的概率为: ,即前次都没猜中,而第次猜中。
则,期望为:
又因:
将期望的式子化简:
其中的值为:
#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;
}