Description

【故事背景】
JYY赶上了互联网创业的大潮,为非常勿扰开发了最新的手机App实现单身
大龄青年之间的“速配”。然而随着用户数量的增长,JYY发现现有速配的算法似
乎很难满足大家的要求,因此JYY决定请你来调查一下其中的原因。
【问题描述】
应用的后台一共有N个女性和M个男性,他们每个人都希望能够找到自己的
合适伴侣。为了方便,每个男性都被编上了1到N之间的一个号码,并且任意两
个人的号码不一样。每个女性也被如此编号。
JYY应用的最大特点是赋予女性较高的选择权,让每个女性指定自己的“如
意郎君列表”。每个女性的如意郎君列表都是所有男性的一个子集,并且可能为
空。如果列表非空,她们会在其中选择一个男性作为自己最终接受的对象。
JYY用如下算法来为每个女性速配最终接受的男性:将“如意郎君列表”中的
男性按照编号从小到大的顺序呈现给她。对于每次呈现,她将独立地以P的概率
接受这个男性(换言之,会以1−P的概率拒绝这个男性)。如果她选择了拒绝,
App就会呈现列表中下一个男性,以此类推。如果列表中所有的男性都已经呈现,
那么中介所会重新按照列表的顺序来呈现这些男性,直到她接受了某个男性为止。
显然,在这种规则下,每个女性只能选择接受一个男性,而一个男性可能被多个
女性所接受。当然,也可能有部分男性不被任何一个女性接受。
这样,每个女性就有了自己接受的男性(“如意郎君列表”为空的除外)。现
在考虑任意两个不同的、如意郎君列表非空的女性a和b,如果a的编号比b的编
号小,而a选择的男性的编号比b选择的编号大,那么女性a和女性b就叫做一对
不稳定因素。
由于每个女性选择的男性是有一定的随机性的,所以不稳定因素的数目也是
有一定随机性的。JYY希望你能够求得不稳定因素的期望个数(即平均数目),
从而进一步研究为什么速配算法不能满足大家的需求。

Input

输入第一行包含2个自然数N,M,表示有N个女性和N个男性,以及所有女
性的“如意郎君列表”长度之和是M。
接下来一行一个实数P,为女性接受男性的概率。
接下来M行,每行包含两个整数a,b,表示男性b在女性a的“如意郎君列表”
中。
输入保证每个女性的“如意郎君列表”中的男性出现切仅出现一次。
1≤N,M≤500,000,0.4≤P<0.6

Output

输出1行,包含一个实数,四舍五入后保留到小数点后2位,表示不稳定因素的期望数目。

Sample Input

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

Sample Output

0.89

HINT

Source

By 佚名上传

~~~~~~~~~~~~~~~~~~~~~~~~~~~

期望+树状数组+思路~

推荐一篇博客:http://blog.csdn.net/qq_33229466/article/details/71170436~

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define ld long doubleint n,m,now;
ld p,c[500001],ans,r,w,gl[500001];struct node{int x,y;
}a[500001];bool operator < (node u,node v)
{return u.x==v.x ? u.y<v.y:u.x<v.x;
}int read()
{int x=0,f=1;char ch=getchar();while(ch<'0' || ch>'9') {if(ch=='-') f=-1;ch=getchar();}while(ch>='0' && ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;
}void add(int u,ld v)
{for(;u<=n;u+=u&(-u)) c[u]+=v;
}ld cal(int u)
{ld now=0;for(;u;u-=u&(-u)) now+=c[u];return now;
}int main()
{n=read();m=read();cin>>p;for(int i=1;i<=m;i++) a[i].x=read(),a[i].y=read();sort(a+1,a+m+1);for(int i=1;i<=m;i++){if(now!=a[i].x){for(register int j=i-1;j && a[j].x==now;j--) add(a[j].y,gl[j]);now=a[i].x;r=w=1;for(register int j=0;a[i+j].x==now;j++,w*=(1-p));w=1.0-w;}gl[i]=r*p/w;r*=(1-p);ans+=gl[i]*(cal(n)-cal(a[i].y));}printf("%.2lf\n",(double)ans);return 0;
}

BZOJ 4481 [Jsoi2015] 非诚勿扰相关推荐

  1. bzoj 4488: [Jsoi2015]最大公约数

    4488: [Jsoi2015]最大公约数 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 270  Solved: 154 [Submit][Sta ...

  2. bzoj 4487: [Jsoi2015]染色问题

    先贴一个题解吧,最近懒得要死2333,可能是太弱的原因吧,总是扒题解,(甚至连题解都看不懂了),blog也没更新,GG http://blog.csdn.net/werkeytom_ftd/artic ...

  3. Bzoj4481 [Jsoi2015]非诚勿扰

    Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 147  Solved: 75 Description [故事背景] JYY赶上了互联网创业的大潮,为 ...

  4. [暑假的bzoj刷水记录]

    (这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊  堆一起算了 隔一段更新一下.  7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...

  5. ZJOI2019一轮停课刷题记录

    Preface 菜鸡HL终于狗来了他的省选停课,这次的时间很长,暂定停到一试结束,不过有机会二试的话还是可以搞到4月了 这段时间的学习就变得量大而且杂了,一般以刷薄弱的知识点和补一些新的奇怪技巧为主. ...

  6. 退役前的做题记录1.0

    退役前的做题记录1.0 租酥雨最近很懒qwq,具体表现在写题的时候不想发题解了. 但是想想这样也不太好,就决定发个一句话(半句话到几句话不等)题解上来. 2018-09.18-2018-09.28 [ ...

  7. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  8. S-T平面图中利用最短路求最小割(BZOJ 1001)

    BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...

  9. BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)

    题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...

最新文章

  1. C++加快编译速度的方法
  2. O2O防刷单并没那么难,看完这个你也会反作弊了
  3. STM32(Cortex-M3)开发,RVDS和MDK谁优谁劣?
  4. 如何使用Tasklist命令
  5. 已经windows如何在安装linux,如何在已经安装linux情况下安装windows
  6. python- 决策树分类器
  7. RN与Android原生交互
  8. spring图片转视频_视频转GIF在线教程,GIF制作方法
  9. F5补丁修复及几点命令
  10. 利用oracle long类型字段,插入大文本
  11. RS-274drillIPC-2581三种PCB Gerber文件的观察软件
  12. doc创建计算机用户,问什么我电脑一直创建这些文件夹?$RECYCLE.BIN qqpcmgr_docpro System Volume Information...
  13. Adobe Reader 卸载不干净处理方法
  14. 在IntelliJ下如何做parameterize method的重构
  15. Python使用阿里API进行情感分析
  16. pem crt key文件区别
  17. 微信小程序-跳转url页面
  18. 【文智背后的奥秘】系列篇——文本聚类系统
  19. android的热修复,Android热修复之
  20. 【目标跟踪】基于迭代扩展卡尔曼滤波算法实现目标滤波跟踪(IEKF)附Matlab代码

热门文章

  1. C++如何选择数据类型
  2. 给手机/平板浏览器上网增加英文外…
  3. mysql 存储文本数据类型_MYSQL中的五种数据类型
  4. flutter 让TextFeild可以根据输入法上移
  5. 数据可视化|世界杯球迷统计
  6. Linux(Ubuntu)简洁版切换中文输入法和安装软件问题
  7. 百度发布AI同传,详解人工同传与机器同传优劣势
  8. 放任通胀就是与虎相伴
  9. 设计师必须了解的找工作秘籍
  10. javaScript内置函数大全