2019ICPC(银川) - Take Your Seat(概率公式)
題目鏈接:點擊查看
題目大意:朵哈要坐飛機去旅游,出發的時候包括朵哈在內一共有n個人要上飛機,這班飛機有n個座位,第i個人的座位號是i,朵哈的座位號是1。
現在n個人按照座位號是從1到n的順序上飛機,但朵哈忘了自己的座位,于是她就等概率隨機選了一個位置坐下了,而其余人都記得自己的位置,如果他們中的一個人上飛機之后發現自己的位置被占了,則會在剩下的位置中等概率隨機選一個坐下,如果沒被占,則會直接坐到自己的位置上。
你需要計算最后一個上飛機的人坐到了自己位置上的概率。
朵哈返程的時候,包括她在內的m個人會按照一個隨機的座位號上飛機。
這班飛機有m個座位,朵哈的座位號還是1。但是朵哈又一次忘記了自己的座位,并且還是只有她忘記了自己的座位。現在所有人找座位的規則和出發時完全相同,朵哈或任何一個發現自己座位已經被占了的人會等概率隨機選一個沒被占的座位坐下。
你需要計算最后一個上飛機的人坐到了自己位置上的概率。
題目分析:
我們先來分析第一問,按照順序上飛機,很容易知道,當n=1時,答案時1,當n=2時,答案是0.5,那么我們來分析一下n大于等于3的情況,我們設f(i)為飛機上一共有i個人時的概率
其實自己在紙上畫一畫n=3和n=4的情況,應該一下子也能確定第一問的概率當n大于等于2時時恒等于0.5的了。。
接下來我們在第一問的基礎上討論第二問:
又因為f(2)=f(3)=f(4)=……=f(n-1)=f(n)=0.5,
所以我們分兩種情況即可:
而朵哈上飛機的順序是隨機的,所以朵哈最后一個上飛機的概率為1/m,所以第二問的公式也就推出來了:
f(m)=(1/m)*1+(m-1/m)*0.5=(m+1)/(2*m),n==1時也適用
上代碼:
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<stack> #include<queue> #include<map> #include<cmath> #include<set> #include<sstream> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e6+100;int main() { // freopen("input.txt","r",stdin);int w;cin>>w;int kase=0; while(w--){int n,m;scanf("%d%d",&n,&m);printf("Case #%d: ",++kase);if(n==1)printf("%.6f",1.0);elseprintf("%.6f",0.5);printf(" %.6f\n",((m+1)*1.0)/(2*m*1.0));}return 0; }?
總結
以上是生活随笔為你收集整理的2019ICPC(银川) - Take Your Seat(概率公式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU - 5015 233 Matri
- 下一篇: 2019ICPC(南京) - super