2016多校联合训练#7
HDU 5810 Balls and Boxes
方差,期望,数学
传送门:HDU
题意
把n个球放到m个盒子里面,随机变量 Xi 表示每个盒子中球的个数,求球个数方差V的期望E(V)。
思路
我是不会。。下面的摘自大神们的博客。
首先这是一个二项分布。对于一个盒子来说,n次实验是扔n个球,每次进入盒子概率是1/m。样本方差的期望等于总体的方差!证明爱看不看。直接的结果: E(V)=n∗(m−1)m2
有不用这个性质直接推出公式的。膜大神。
E(V)=E(∑ni=0(Xi−X¯)2)m=E(x2)−2∗nm∗E(x)+n2m2
E(x)=nm
E(x2)=D(x)+[Ex]2
二项分布, D(x)=n∗(m−1)m2
所以带到上面的式子中就变成了 E(V)=n∗(m−1)m2官方题解我是看不懂。
E[V]=E[∑mi=1(Xi−X¯)2m]=E[(Xi−X¯)2]=E[X2i−2XiX¯+X¯2]
=E[X2i]−2X¯E[Xi]+E[X¯2]=E[X2i]−2X¯2+X¯2=E[X2i]−n2m2
所以关键是要求出 E[X2i] . 我们用随机变量 Yj 来表示第j个球是否在第i个盒子中,如果在则 Yj=1 ,否则 Yj=0 . 于是
E[X2i]=E[(∑nj=1Yj)2]=E[∑nj=1Y2j]+2E[∑nj=1∑nk=1,k≠jYjYk]=nE[Y2j]+n(n−1)E[YjYk]
=nm+n(n−1)m2
因此,
E[V]=nm+n(n−1)m2−n2m2=n(m−1)m2
代码
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b)
{
return b==0 ? a : gcd(b,a%b);
}
int main()
{
ll m,n;
while(scanf("%lld%lld",&n,&m)==2&&(m!=0&&n!=0))
{
ll fz=(ll) n*(m-1);
ll fm=(ll) m*m;
ll g=gcd(fz,fm);
fz/=g;
fm/=g;
printf("%lld/%lld\n",fz,fm);
}
}