u003 計算概率

2022-09-14 18:27:12 字數 1716 閱讀 9007

time limit: 1 second

memory limit: 128 mb

小明有n個長度不一的小木棍,這些木棍的長度都是正整數。小明的父親想和小明做乙個遊戲。他規定乙個整數長度l,讓小明閉著眼睛從n個木棍中隨便拿出兩個。如果兩個木棍的長度總和小於等於l,則小明勝,否則小明的父親勝。小明想知道他勝出的概率究竟有多大。 

輸入包含兩行。第一行為兩個整數n和l,其中n和l都不超過100000。第二行包含n個整數,分別為n個木棍的長度。

輸出包含乙個實數,小明勝出的概率,保留兩位小數。

4 5

1 2 3 4

0.67
【題解】

輸入的資料有一些是沒有用的。

比如出現了乙個數字大於等於l。

則無論它和另外哪一種木棍組合都沒辦法組合出小於等於l的。

所以可以捨棄掉。

對於那些小於l的木棍。

開乙個陣列num[1..l]記錄它們的個數。

然後用s累加前j種數字的總個數。

然後k=l-j;

對於j∈1..l/2;

ans+= s*num[k];

注意s會隨j的累加逐漸變大。

這是因為k可以和j累加變成l正好。也可以和小於j的數字組合成小於l的長度。

最後累加的s還有用。

ans+=c(s,2);

設兩根木棒長度為x1,x2;

我們處理的第一種情況是x1然後c(s,2)則表示x1可以預見x1,x2不能同時大於l/2;

然後n要用__int64類,不然n*(n-1)的時候可能會溢位。

不區別組合出的長度小於等於l的情況的總數是c(n,2);

所以最後求概率的時候除c(n,2)即可。

c(n,2)=n*(n-1)/2;

【**】

/*

輸入的資料有一些是沒有用的。

比如出現了乙個數字大於等於l。

則無論它和另外哪一種木棍組合都沒辦法組合出小於等於l的。

所以可以捨棄掉。

對於那些小於l的木棍。

開乙個陣列num[1..l]記錄它們的個數。

然後用s累加前j種數字的總個數。

然後k=l-j;

對於j∈1..l/2;

ans+= s*num[k];

注意s會隨j的累加逐漸變大。

這是因為k可以和j累加變成l正好。也可以和小於j的數字組合成小於l的長度。

最後累加的s還有用。

ans+=c(s,2);

設兩根木棒長度為x1,x2;

我們處理的第一種情況是x1int num[100001] = ;//記錄長度小於l的木棍各有多少根。

__int64 n, l;//用__int64.防止溢位

void input_data();

void get_ans();

int main()

void get_ans()

if (k == j) //k==j的情況 比如j=1,然後l=4.則l-1等於3.j++,k--後j==2;

s += num[j];//而2<=l/2所以歸為第二類。即c(s,2);

ans += s*(s - 1)/2.0;//獲取第二類的方案數

ans = ans / (n*(n - 1) / 2.0);//總數是c(n,2);

printf("%.2lf", ans);//保留兩位輸出。

}void input_data()

}

概率計算(暫定)

這是我個人編的一小段 具體的使用思路是 t為分母,i為分子的乙個 i t的概率,如果出現結果那麼結果內會出現1,而且每次出現結果都會 1,比如111 1024,可以理解為進行111次1 1024概率的實驗,一般意義上可以理解為約為111 1024概率的問題,只是有的時候結果大於等於2,也就是說完全的...

概率的計算

疊加用乘法 比如說扔一枚硬幣,是正面的概率是1 2,那麼連扔兩次是正面的概率就是1 4,三次則是1 8,依此類推。這個在數學上叫做乘法定理,就是多個事件同時發生,用乘法 如果是準備兩件,我們可以算兩件都失敗的概率,是兩個70 相乘,為49 於是成功概率為51 如果是準備三件,那三件都失敗的概率是三個...

藍橋杯 概率計算 (概率DP)

題目傳送 藍橋杯 概率計算 時間限制 1.0s 記憶體限制 256.0mb 錦囊1 錦囊2 錦囊3 問題描述 生成n個 a,b 的隨機整數,輸出它們的和為x的概率。輸入格式 一行輸入四個整數依次為n,a,b,x,用空格分隔。輸出格式 輸出一行包含乙個小數字和為x的概率,小數點後保留四位小數 樣例輸入...