日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU5985 Lucky Conins 概率题

發布時間:2023/12/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU5985 Lucky Conins 概率题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Lucky Conins

題意

最多共101010種硬幣,所有的硬幣之和不超過100000100000100000,每次將所有的硬幣拋出,第iii中硬幣正面朝上的概率為pip_ipi?,將反面朝上的硬幣移除掉.直至最后剩一種硬幣或沒有硬幣則停止.若最后剩余一種硬幣,則稱這種硬幣是幸運的,求每種硬幣的幸運概率.

題解

推公式題.

假設我們要求第iii種硬幣成為幸運硬幣的概率,那么我們可以求其在第xxx步成為幸運硬幣的概率,然后對xxx求和即可.

計算硬幣iiixxx步成為幸運硬幣的概率:

一.第iii種硬幣,必須在第xxx步至少剩111個:

[1] : Alive[i,x]=1?(1?pix)ciAlive[i,x] = 1-(1-p_i^x)^{c_i}Alive[i,x]=1?(1?pix?)ci?

硬幣iii在第xxx步存活:pixp_i^xpix?,在第xxx步及之前死亡:1?pix1-p_i^x1?pix?,第iii種所有硬幣在第xxx步都死亡(1?pix)ci(1-p_i^x)^{c_i}(1?pix?)ci?,第iii種在第xxx步至少剩余一個硬幣1?(1?pix)ci1-(1-p_i^x)^{c_i}1?(1?pix?)ci?

二. 第jjj種硬幣,至少有一枚要在第x?1x-1x?1步存活,第xxx步死亡

先考慮對于第jjj種硬幣,它至少有一枚硬幣第x?1x-1x?1步存活,在第xxx步死亡的概率.

假設第jjj種有ttt枚硬幣在第x?1x-1x?1步存活,在第xxx步死亡:

Ccjt(pjx?1)t(1?pjx?1)cj?t(1?pj)t=Ccjt(pjx?1?pjx)t(1?pjx?1)cj?tC_{c_j}^t(p_j^{x-1})^t(1-p_j^{x-1})^{c_j-t}(1-p_j)^t = C_{c_j}^t(p_j^{x-1}-p_j^{x})^t(1-p_j^{x-1})^{c_j-t}Ccj?t?(pjx?1?)t(1?pjx?1?)cj??t(1?pj?)t=Ccj?t?(pjx?1??pjx?)t(1?pjx?1?)cj??t

ttt111cjc_jcj?求和,利用二項式定理我們得到了第jjj種硬幣,它至少有一枚硬幣第x?1x-1x?1步存活,在第xxx步死亡的概率:

[2] : (1?pjx)cj?(1?pjx?1)cj(1-p_j^{x})^{c_j}-(1-p_j^{x-1})^{c_j}(1?pjx?)cj??(1?pjx?1?)cj?.

三.除第iii種之外的所有硬幣,至少有111枚在x?1x-1x?1步存活,在第xxx步死亡

為避免重復計算

jjj是不與iii相等的數中最小的.
我們考慮是第jjj種硬幣起到了這個作用,那么jjj種以后的硬幣只要滿足在xxx步及之前死光即可.

然后再考慮是j+tj+tj+t種硬幣起到了這個作用,那么j+tj+tj+t種以后的硬幣只要滿足在xxx步及之前死光即可,并且要滿足第j+tj+tj+t種之前的硬幣必須不能起作用(即在x?1x-1x?1步及之前就必須全部死光),否則會算重.

也就是說我們需要記錄lft[j,x]lft[j,x]lft[j,x]表示jjj種之前的硬幣全部在第x?1x-1x?1步及之前就死光.記錄rgt[j,x]rgt[j,x]rgt[j,x]表示jjj種之后的硬幣全都在第xxx步及之前就死光.
其中lft[j,x]=∑t≠i,t&lt;j(1?ptx?1)ctlft[j,x] = \sum_{t \ne i,t &lt; j}(1-p_t^{x-1})^{c_t}lft[j,x]=t??=i,t<j?(1?ptx?1?)ct?,rgt[j,x]=∑t≠i,t&gt;jn(1?ptx)ctrgt[j,x] = \sum_{t\ne i,t &gt; j}^n(1-p_t^x)^{c_t}rgt[j,x]=t??=i,t>jn?(1?ptx?)ct?
那么這部分的答案就是

∑j≠i((1?pjx+1)cj?(1?pjx)cj)?lft[j,x]?rgt[j,x]\sum_{j \ne i}((1-p_j^{x+1})^{c_j}-(1-p_j^x)^{c_j})*lft[j,x]*rgt[j,x]j??=i?((1?pjx+1?)cj??(1?pjx?)cj?)?lft[j,x]?rgt[j,x]

四.最終公式

(1?(1?pix)ci)∑j≠i(((1?pjx)cj?(1?pjx?1)cj)?lft[j,x]?rgt[j,x])(1-(1-p_i^x)^{c_i})\sum_{j \ne i}(((1-p_j^{x})^{c_j}-(1-p_j^{x-1})^{c_j})*lft[j,x]*rgt[j,x])(1?(1?pix?)ci?)j??=i?(((1?pjx?)cj??(1?pjx?1?)cj?)?lft[j,x]?rgt[j,x])

代碼

#include <iostream> #include <algorithm> #include <cstring> #define pr(x) std::cout << #x << ':' << x << std::endl #define rep(i,a,b) for(int i = a;i <= b;++i)double p[11]; int cnt[11]; int n; const int lim = 50; double fastpow(double x,int n) {double res = 1.0;while(n) {if(n&1) res *= x;x *= x;n >>= 1; }return res; } double f(int id,int x) {return fastpow(1-fastpow(p[id],x),cnt[id]) - fastpow(1-fastpow(p[id],x-1),cnt[id]); }double calc(int i) {double ans = 0;rep(x,1,lim) {double res = 1-fastpow(1-fastpow(p[i],x),cnt[i]);double tmp = 0,lft = 1;rep(j,1,n) {if(j == i) continue;double rgt = 1;rep(t,j+1,n) {if(i == t) continue;rgt *= fastpow(1-fastpow(p[t],x),cnt[t]);}tmp += f(j,x)*lft*rgt;lft *= fastpow(1-fastpow(p[j],x-1),cnt[j]);}ans += res * tmp;}return ans; } int main() {int T;std::cin >> T;while(T--) {std::cin >> n;rep(i,1,n) {std::cin >> cnt[i] >> p[i];}if(n == 1) {printf("%.6f\n",1.0);continue;}rep(i,1,n) {if(i != 1) printf(" ");printf("%.6f",calc(i));}puts("");}return 0; }

總結

以上是生活随笔為你收集整理的HDU5985 Lucky Conins 概率题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。