HDU - 6239 Interview (古典概型)

problem link:http://acm.hdu.edu.cn/showproblem.php?pid=6239

题意

Alice和Bob去面试。参加面试的人共有n个,面试官会将前K(0<=K)个人,分到第1天,后n-K个人分到第二天。已知Alice在第二天,现给出Bob所在第几天。Alice是第二天第x个面试的,求x的数学期望。

思路

列出n=3 d=2 的所有情况(样例):
假设Alice为1号,Bob为2号

第一天第二天是否合法
1230
1320
2130
2310
3121
3211
1231
1321
2131
2311
3121
3211

合法的情况共8种,因此数学期望为
1 ∗ 1 8 ∗ 3 + 2 ∗ 1 8 ∗ 3 + 3 ∗ 1 8 ∗ 2 = 15 8 1*\frac{1}{8}*3+2*\frac{1}{8}*3+3*\frac{1}{8}*2 = \frac{15}{8} 1813+2813+3812=815

可以看出,划分第一天与第二天并不是等概率划分,因此不能直接去求每种情况的期望。

问题本身能够转化为古典概型。
所有情况即为 1 , 2 , . . . , n 1,2,...,n 1,2,...,n个人的全排列(假设Alice是1号,Bob是2号)。
现在考虑d=1时的情况:
所有合法情况的总数为
A = ∑ i = 1 n − 1 i ∗ ( n − i ) ∗ ( n − 2 ) ! A = \sum_{i=1}^{n-1}i*(n-i)*(n-2)! A=i=1n1i(ni)(n2)!
设概率 P ( X = k ) P(X=k) P(X=k)表示前k个人在第一天,后n-k个人在第二天的概率,则
P ( X = k ) = k ∗ ( n − k ) ∗ ( n − 2 ) ! A P(X=k)=\frac{k*(n-k)*(n-2)!}{A} P(X=k)=Ak(nk)(n2)!
第二天有n-k个人,易知Alice的面试编号的期望为 n − k + 1 2 \frac{n-k+1}{2} 2nk+1
所以,设 E ( Y = k ) E(Y=k) E(Y=k)表示前k个人在第一天,Alice的编号的期望。
E ( Y = k ) = P ( X = k ) ∗ n − k + 1 2 E(Y=k)=P(X=k)*\frac{n-k+1}{2} E(Y=k)=P(X=k)2nk+1
最终结果
E Y = ∑ k = 1 n − 1 k ∗ ( n − k ) ∗ ( n − 2 ) ! ∗ ( n − k + 1 ) A ∗ 2 = ∑ k = 1 n − 1 k ∗ ( n − k ) ∗ ( n − k + 1 ) 2 ∗ ∑ i = 1 n − 1 i ∗ ( n − i ) = 1 2 ∗ ∑ i = 1 n − 1 i ∗ ( n − i ) ∗ ∑ k = 1 n − 1 k ∗ ( n − k ) ∗ ( n − k + 1 ) \begin{aligned} EY&amp;=\sum_{k=1}^{n-1}\frac{k*(n-k)*(n-2)!*(n-k+1)}{A*2} \\ &amp;=\sum_{k=1}^{n-1}\frac{k*(n-k)*(n-k+1)}{ 2*\sum_{i=1}^{n-1}i*(n-i)}\\ &amp;=\frac{1}{ 2*\sum_{i=1}^{n-1}i*(n-i)}*\sum_{k=1}^{n-1}k*(n-k)*(n-k+1) \end{aligned} EY=k=1n1A2k(nk)(n2)!(nk+1)=k=1n12i=1n1i(ni)k(nk)(nk+1)=2i=1n1i(ni)1k=1n1k(nk)(nk+1)
式子推起来很麻烦,其中要用到:
∑ i = 1 n i 2 = n ∗ ( n + 1 ) ∗ ( 2 n + 1 ) 6 \sum_{i=1}^{n}i^2=\frac{n*(n+1)*(2n+1)}{6} i=1ni2=6n(n+1)(2n+1)
∑ i = 1 n i 3 = n 2 ( n + 1 ) 2 4 \sum_{i=1}^{n}i^3=\frac{n^2(n+1)^2}{4} i=1ni3=4n2(n+1)2
最终可以推得
E Y = n + 2 4 EY=\frac{n+2}{4} EY=4n+2




现在考虑d=2的情况。

所有合法情况的总数为
A = ∑ i = 0 n − 2 ( n − i ) ∗ ( n − i − 1 ) ∗ ( n − 2 ) ! A = \sum_{i=0}^{n-2}(n-i)*(n-i-1)*(n-2)! A=i=0n2(ni)(ni1)(n2)!

P ( X = k ) = ( n − k ) ∗ ( n − k − 1 ) ∗ ( n − 2 ) ! A P(X=k)=\frac{(n-k)*(n-k-1)*(n-2)!}{A} P(X=k)=A(nk)(nk1)(n2)!

E ( Y = k ) = P ( X = k ) ∗ n − k + 1 2 E(Y=k)=P(X=k)*\frac{n-k+1}{2} E(Y=k)=P(X=k)2nk+1
最终结果
E Y = ∑ k = 0 n − 2 ( n − k ) ∗ ( n − k − 1 ) ∗ ( n − 2 ) ! ∗ ( n − k + 1 ) A ∗ 2 = ∑ k = 0 n − 2 ( n − k ) ∗ ( n − k − 1 ) ∗ ( n − k + 1 ) 2 ∗ ∑ i = 0 n − 2 ( n − i ) ∗ ( n − i − 1 ) = 1 2 ∗ ∑ i = 0 n − 2 ( n − i ) ∗ ( n − i − 1 ) ∗ ∑ k = 0 n − 2 ( n − k ) ∗ ( n − k − 1 ) ∗ ( n − k + 1 ) \begin{aligned} EY&amp;=\sum_{k=0}^{n-2}\frac{(n-k)*(n-k-1)*(n-2)!*(n-k+1)}{A*2} \\ &amp;=\sum_{k=0}^{n-2}\frac{(n-k)*(n-k-1)*(n-k+1)} { 2*\sum_{i=0}^{n-2}(n-i)*(n-i-1)}\\ &amp;=\frac{1}{ 2*\sum_{i=0}^{n-2}(n-i)*(n-i-1)}*\sum_{k=0}^{n-2}(n-k)*(n-k-1)*(n-k+1){} \end{aligned} EY=k=0n2A2(nk)(nk1)(n2)!(nk+1)=k=0n22i=0n2(ni)(ni1)(nk)(nk1)(nk+1)=2i=0n2(ni)(ni1)1k=0n2(nk)(nk1)(nk+1)
最终可以推得
E Y = 3 n + 6 8 EY=\frac{3n+6}{8} EY=83n+6
代码:

#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define ld double
#define ull unsigned long long
#define __ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)

const int maxn = 5e5 + 10;
const ll mod = 1e9 + 7;

ll pow_mod(ll a, ll b, ll m) {
    ll ans = 1;
    while (b > 0) {
        if ((b & 1) != 0) ans = ans * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return ans;
}

int main() {
    __;
    int _;
    cin >> _;
    for (int sce = 1; sce <= _; ++sce) {
        ll n, d;
        cin >> n >> d;
        if (d == 1)cout << (n + 2) * pow_mod(4, mod - 2, mod) % mod << endl;
        else cout << (3 * n + 6) * pow_mod(8, mod - 2, mod) % mod << endl;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值