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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【期望】选书问题(金牌导航 期望-7)

發布時間:2023/12/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【期望】选书问题(金牌导航 期望-7) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

選書問題

金牌導航 期望-7

題目大意

有n個人,每個人有自己的選書目錄,一個人有p的概率選當前的書,有1-p的概率不選,即去查看下一本書(過n后回到1),現在問你選書的逆序對的期望數

輸入樣例

5 5 0.5 5 1 3 2 2 2 2 1 3 1

輸出樣例

0.89

數據范圍

1?N,M?5×105,0.4?p?0.61\leqslant N,M\leqslant 5\times 10^5,0.4\leqslant p \leqslant 0.61?N,M?5×105,0.4?p?0.6

解題思路

對于1個人,設f_i為選第i本書的期望值,num_i為選書目錄里里書的數量
那么有:
f2=f1p×(1?p)×p=f1×(1?p)f_2=\frac{f_1}{p}\times (1-p)\times p = f_1\times (1-p)f2?=pf1??×(1?p)×p=f1?×(1?p)
f1p\frac{f_1}{p}pf1??為查看f1f_1f1?的期望值,1-p是第一本書不選,p為選第二本書
同理,則有:
f3=f2p×(1?p)×p=f2×(1?p)=f1×(1?p)2f4=f3p×(1?p)×p=f3×(1?p)=f1×(1?p)3...fnumi=fnumi?1p×(1?p)×p=fnumi?1×(1?p)=f1×(1?p)numi?1f_3=\frac{f_2}{p}\times (1-p)\times p = f_2\times (1-p)= f_1\times (1-p)^2\\ f_4=\frac{f_3}{p}\times (1-p)\times p = f_3\times (1-p)= f_1\times (1-p)^3\\ ...\\ f_{num_i}=\frac{f_{num_i - 1}}{p}\times (1-p)\times p = f_{num_i-1}\times (1-p)= f_1\times (1-p)^{num_i-1}f3?=pf2??×(1?p)×p=f2?×(1?p)=f1?×(1?p)2f4?=pf3??×(1?p)×p=f3?×(1?p)=f1?×(1?p)3...fnumi??=pfnumi??1??×(1?p)×p=fnumi??1?×(1?p)=f1?×(1?p)numi??1
那么有(+p為最初始的一次):
f1=fnumip×(1?p)×p=fnumi×(1?p)=f1×(1?p)numi+pf_1=\frac{f_{num_i}}{p}\times (1-p)\times p = f_{num_i}\times (1-p)= f_1\times (1-p)^{num_i}+pf1?=pfnumi???×(1?p)×p=fnumi??×(1?p)=f1?×(1?p)numi?+p
解該方程:
f1=f1×(1?p)numi+pf1×(1?(1?p)numi)=pf1=p1?(1?p)numi\begin{aligned}f_1 & = f_1\times (1-p)^{num_i}+p \\ f_1\times(1-(1-p)^{num_i}) & =p\\f_1&=\frac{p}{1-(1-p)^{num_i}}\end{aligned}f1?f1?×(1?(1?p)numi?)f1??=f1?×(1?p)numi?+p=p=1?(1?p)numi?p??
得到f后,利用樹狀數組求逆序對即可

代碼

#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long #define N 500010 using namespace std; int n, m, w, s[N], num[N], first[N], last[N], next[N]; double p, g, ans, c[N], pw[N], sum; struct node {int x, y; }a[N]; double ask(int x)//樹狀數組 {double sum = 0;for (; x; x -= x&-x)sum += c[x];return sum; } void add(int x, double y) {for (; x <= 500000; x += x&-x)c[x] += y;return; } bool cmp(node x, node y) {return x.x < y.x || x.x == y.x && x.y < y.y;//按編號排序 } int main() {scanf("%d%d%lf", &n, &m, &p);for (int i = 1; i <= m; ++i){scanf("%d%d", &a[i].x, &a[i].y);num[a[i].x]++;}sort(a + 1, a + 1 + m, cmp);pw[0] = 1;for (int i = 1; i <= n; ++i)pw[i] = pw[i - 1] * (1 - p);for (int i = 1; i <= m; ++i){if (a[i].x != a[i - 1].x) g = p / (1.0 - pw[num[a[i].x]]);//新的一個數的期望else g = g * (1 - p);//不是新的就乘1-p來求ans += (sum - ask(a[i].y)) * g;//前面加入的人的編號都比當前小,只要找到書的編號大的即可add(a[i].y, g);sum += g;}printf("%.2lf", ans);return 0; }

總結

以上是生活随笔為你收集整理的【期望】选书问题(金牌导航 期望-7)的全部內容,希望文章能夠幫你解決所遇到的問題。

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