选书问题

金牌导航 期望-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)相关推荐

  1. 【期望】路径长度(金牌导航 期望-1)

    路径长度 金牌导航 期望-1 题目大意 给出一个图,问你从1走到n的期望路径长度 输入样例 4 4 1 2 1 1 3 2 2 3 3 3 4 4 输出样例 7.00 数据范围 1⩽n⩽1051\le ...

  2. 【期望】守卫挑战(金牌导航 期望-9)

    守卫挑战 金牌导航 期望-9 题目大意 有n个数,到第i个数,有p_i的概率选择这个数,问你最后选了最少L个数,且选的数的和再加k大于等于0 样例输入 3 1 0 10 20 30 -1 -1 2 样 ...

  3. 【期望】关灯游戏(金牌导航 期望-8)

    关灯游戏 金牌导航 期望-8 题目大意 有n盏灯,有些是亮的,有的是暗的,现在如果按一个位置的开关,那么是它因数的位置的灯都会改变开关情况,现在如果用k步不能直接关完,就随机按,直到可以k步关完,就用 ...

  4. 【期望】【高斯消元】图上游走(金牌导航 期望-6)

    图上游走 金牌导航 期望-6 题目大意 给出一个无向连通图,小明初始在点1,每一步等概率地走向相连的其他点,当走到n时结束,定义分数从1为走到n的过程中经过的边的编号之和,现在让你给这m条边重新编号, ...

  5. 【期望】彩色圆环(金牌导航 期望-5)

    彩色圆环 金牌导航 期望-5 题目大意 给你一个环,每个位置的数字等概率为1~m中的其中一个,对于连续的相同数字的串,记其长度为aia_iai​,求aia_iai​的积的期望值 输入样例 8 1 输出 ...

  6. 【期望】期望分数(金牌导航 期望-4)

    期望分数 金牌导航 期望-4 题目大意 告诉你一个01串中每个位置是1的概率,对于连续的x个1,贡献为x3x^3x3,问你期望贡献是多少 输入样例 3 0.5 0.5 0.5 输入样例 6.0 数据范 ...

  7. 【期望】期望收益(金牌导航 期望-3)

    期望收益 金牌导航 期望-3 题目大意 给你一个01串,有些位置是未知的,连续的x个1贡献为想x2x^2x2,现在问你该串的期望贡献 输入样例 4 ???? 输出样例 4.1250 数据范围 1⩽n⩽ ...

  8. 【期望】乘坐电梯(金牌导航 期望-2)

    乘坐电梯 金牌导航 期望-2 题目大意 有n个人,对于没一个单位时间有p的概率最前面的1个人进电梯,有(1-p)的概率不进,问你t个单位时间后,电梯中的期望人数 样例输入 1 1 0.50 1 样例输 ...

  9. 【DP】【树状数组】方伯伯的玉米田/优美玉米(luogu 3287/金牌导航 数据结构优化DP-5)

    正题 luogu 3287 金牌导航 数据结构优化DP-5 题目大意 有n个玉米,给出高度,你可以选择一个区间,使这个区间的玉米高度+1,你可以进行k次这样的操作,查询你操作完后最长不下降子序列最大值 ...

最新文章

  1. NLP任务中的文本预处理步骤、工具和示例
  2. 【Python基础】Pandas参数设置的八个小技巧
  3. 石油化工静设备计算机辅助设计桌面系统,PV Desktop 石油化工静设备计算机辅助设计桌面系统简介...
  4. apache/nginx中equest.getServerName()外网环境获取不到代理地址/域名
  5. 负载均衡研究 基础
  6. 【redis】redis应用场景,缓存的各种问题
  7. 单片机按键“消抖”的思考
  8. 微软推出一波AI新功能:自动生成图表、更贴心的Cortana和搜索
  9. chrome浏览器设置思源黑体
  10. 不再恐惧入侵者 DLL后门完全清除方法(转)
  11. dubbo源码解析-服务暴露原理
  12. PHP地方门户分类信息网站源码讯客分类信息系统商业版 含手机版
  13. 服务器要使用两张网卡做bond0以实现网络冗余和提高带宽
  14. teamviewer linux centos,teamviewer Linux centos7安装使用详细
  15. 西湖论剑——指鹿为马
  16. windows系统服务器怎么锁屏,使用Windows 8的十个小贴士:自定义锁屏
  17. CDP科普:客户数据中台(CDP)是什么?
  18. 搭建视频会议系统OpenMeetings
  19. 五子棋智能算法——决策树编程实现(三)
  20. SQL Sever 远程计算机拒绝网络连接,错误:1225 具体解决步骤。

热门文章

  1. python没有菜单栏怎么搞mac_Mac 下 sublime 怎么调出顶端菜单栏
  2. python统计字符串中字母个数字母无视大小写_判断一个字符串中字母的个数(无视大小写)...
  3. c++ new一个结构体_C语言结构体,又一个纸老虎,纯干货讲解(附代码)
  4. requestPermissions读写手机存储权限_泛圈云盘可为企业建立高效安全的云办公在线协同文档存储?...
  5. leetcode45. 跳跃游戏 II
  6. 向linux内核增加新的系统调用,为linux内核添加新的系统调用
  7. 单调栈思维 2021年度训练联盟热身训练赛第三场——K题 Summer Trip
  8. 数据结构与算法--数组:二维数组中查找
  9. 数据结构---简单插入排序
  10. P2754 [CTSC1999]家园 / 星际转移问题(网络流)