标签:
1.打表找规律,下面是打表程序:
#include <iostream> #include <cstdio> #define ll long long #define N 100005 using namespace std; ll n,m,b[N],ans,num; ll sqr(ll x) { return x*x; } void dfs(ll r){ if(r==0){ num++; for(int i=1;i<=m;i++) ans+=sqr(b[i]); return; } for(int i=1;i<=m;i++) { b[i]++; dfs(r-1); b[i]--; } } int main() { while(~scanf("%lld%lld",&n,&m)){ for(ll r=1;r<=n;r++){ ans=num=0; dfs(r); ans=m*ans-r*r*num; num=m*m*num; ll g=__gcd(ans,num); printf("r=%lld: %lld/%lld\n",r,ans/g,num/g); } } }
2.数学
V其实就是二项式分布的方差,可以这么理解:
样本是第i个盒子:每次把1个球扔进第i个盒子的概率都是1/m,扔不进就是1-1/m,扔了n个球,于是Xi服从二项式分布。
那么就可以直接用二项式的方差公式$D(X)=n\cdot p\cdot (1-p)$ 这里的p就是1/m。下面是AC程序:
#include <algorithm> #include <cstdio> #define ll long long using namespace std; ll n,m; int main() { while(scanf("%lld%lld",&n,&m),n){ ll a=n*(m-1),b=m*m; ll g=__gcd(a,b); printf("%lld/%lld\n",a/g,b/g); } }
【HDU 5810多校】Balls and Boxes(打表/数学)
标签:
原文地址:http://www.cnblogs.com/flipped/p/5756318.html