【期望】选书问题(金牌导航 期望-7)
選書問題
金牌導(dǎo)航 期望-7
題目大意
有n個人,每個人有自己的選書目錄,一個人有p的概率選當(dāng)前的書,有1-p的概率不選,即去查看下一本書(過n后回到1),現(xiàn)在問你選書的逆序?qū)Φ钠谕麛?shù)
輸入樣例
5 5 0.5 5 1 3 2 2 2 2 1 3 1輸出樣例
0.89數(shù)據(jù)范圍
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個人,設(shè)f_i為選第i本書的期望值,num_i為選書目錄里里書的數(shù)量
那么有:
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后,利用樹狀數(shù)組求逆序?qū)纯?/p>
代碼
#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)//樹狀數(shù)組 {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]]);//新的一個數(shù)的期望else g = g * (1 - p);//不是新的就乘1-p來求ans += (sum - ask(a[i].y)) * g;//前面加入的人的編號都比當(dāng)前小,只要找到書的編號大的即可add(a[i].y, g);sum += g;}printf("%.2lf", ans);return 0; }總結(jié)
以上是生活随笔為你收集整理的【期望】选书问题(金牌导航 期望-7)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 会声会影电脑配置要求(会声会影电脑配置)
- 下一篇: 【期望】关灯游戏(金牌导航 期望-8)