政府網(wǎng)站app建設(shè)seo網(wǎng)站設(shè)計工具
題意自行理解,先講一下概率和期望怎么算
概率
概率準確的定義自行百度,這里就不贅述了
概率的計算其實很簡單,就是將符合條件的情況除以總共的情況
下面以擲骰子為例:
問題:將一個骰子擲出,666朝上的概率是多少
解決
很顯然的,將一個骰子擲出,一共就只有666種情況,分別是 :
111朝上,222朝上,333朝上,444朝上,555朝上,666朝上
我們要求的是666朝上的概率,不難看出,上述符合666朝上的情況只有一種
那么我們的概率就是
P=16P = \frac{1}{6}P=61?
期望
關(guān)于期望的詳細計算可以看這位大佬的文章 知乎傳送門
說的簡單一點,期望就是算加權(quán)平均數(shù),用當(dāng)前情況的值乘上當(dāng)前情況的概率,然后把所有的值都加起來除以1(因為每種情況的概率之和必為1)
回到題目
這道題目仔細思考之后其實會發(fā)現(xiàn),可以用每一個小朋友的期望值之和加起來求得
求解每一個小朋友的期望值
我們設(shè)kkk為所有身高大于等于當(dāng)前小朋友的人數(shù)之和(不包括自身)
然后枚舉當(dāng)前小朋友的視野長度LLL
考慮比當(dāng)前小朋友高的人的站位
那么在這個小朋友前面的LLL個位置都不能站比當(dāng)前小朋友高的人,那么比小朋友高的kkk個人一共有n?Ln-Ln?L個位置可以放,考慮排列順序,則共有An?LkA^{k}_{n-L}An?Lk?種放法
考慮當(dāng)前小朋友的位置
因為視野長度為LLL,所以當(dāng)前小朋友前面必須要預(yù)留出LLL個位置給比他矮的小朋友站,所以當(dāng)前小朋友必須要從L+1L+1L+1的位置開始排,所以當(dāng)前小朋友有(n?L+1)(n-L+1)(n?L+1)種站位
開始計算
根據(jù)乘法原理,符合要求的狀況一共有An?Lk?(n?L+1)A^{k}_{n-L}*(n-L+1)An?Lk??(n?L+1)種
總共的情況就很好計算了,就是An?LkA^{k}_{n-L}An?Lk?
所以當(dāng)前小朋友的期望值就是
Ans=∑L=1nAn?Lk?(n?L+1)An?LkAns = \sum_{L=1}^n \frac{A^{k}_{n-L}*(n-L+1)}{A^{k}_{n-L}}Ans=L=1∑n?An?Lk?An?Lk??(n?L+1)?
最后化簡得出
Ans=k+2n+1Ans = \frac{k+2}{n+1}Ans=n+1k+2?
推導(dǎo)過程看這個大佬
說白了就是不想打公式
CodeCodeCode
#include <bits/stdc++.h>using namespace std;int h[1010],sum,n;
double ans = 0;
int main(){cin >> n;for(int i = 1; i <= n; i++){int a;cin >> a;h[a]++;} for(int i = 1; i <= 1000; i++){ans += 1.0*h[i] * (n+1) / (n - sum+1);sum += h[i];//類似前綴和,計算比當(dāng)前小朋友矮的人數(shù) }cout << fixed << setprecision(2) << ans;return 0;
}