bzoj 4481: [Jsoi2015]非诚勿扰 树状数组+数学期望
来源:互联网 发布:天津大学tju网络登录 编辑:程序博客网 时间:2024/05/22 03:50
题意
有n个女性和n个男性。每个女性的如意郎君列表都是所有男性的一个子集,并且可能为空。如果列表非空,她们会在其中选择一个男性作为自己最终接受的对象。将“如意郎君列表”中的男性按照编号从小到大的顺序呈现给她。对于每次呈现,她将独立地以P的概率接受这个男性(换言之,会以1−P的概率拒绝这个男性)。如果她选择了拒绝,App就会呈现列表中下一个男性,以此类推。如果列表中所有的男性都已经呈现,那么会重新按照列表的顺序来呈现这些男性,直到她接受了某个男性为止。显然,在这种规则下,每个女性只能选择接受一个男性,而一个男性可能被多个女性所接受。当然,也可能有部分男性不被任何一个女性接受。这样,每个女性就有了自己接受的男性(“如意郎君列表”为空的除外)。现在考虑任意两个不同的、如意郎君列表非空的女性a和b,如果a的编号比b的编号小,而a选择的男性的编号比b选择的编号大,那么女性a和女性b就叫做一对不稳定因素。求得不稳定因素的期望个数(即平均数目)
1≤N,M≤500,000,0.4≤P<0.6
分析
显然就是要求期望的逆序对个数。
设
显然
通过无限等比数列求和公式
知道概率后我们只要对数对做一次双关键字排序然后用树状数组求区间和即可。
这题卡精度,要开long double。后来问了别人才知道原来可以先在程序中开long double然后输出的时候再转成double.
代码
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>#include <iomanip>using namespace std;const int N=500005;const long double eps=1e-8;int n,m;struct data{int x,y;}a[N];long double gl[N],c[N],p;bool cmp(data a,data b){ return a.x<b.x||a.x==b.x&&a.y<b.y;}void ins(int x,long double y){ while (x<=n) { c[x]+=y; x+=x&(-x); }}long double find(int x){ long double ans=0; while (x) { ans+=c[x]; x-=x&(-x); } return ans;}int main(){ scanf("%d%d",&n,&m); cin>>p; for (int i=1;i<=m;i++) scanf("%d%d",&a[i].x,&a[i].y); sort(a+1,a+m+1,cmp); int now=0,s=0; long double w,r,ans=0; for (int i=1;i<=m;i++) { if (a[i].x!=now) { for (int j=i-1;j&&a[j].x==now;j--) ins(a[j].y,gl[j]); now=a[i].x;s=0;w=r=1; for (s=0;a[i+s].x==now;s++,w*=(1-p)); w=1-w; } gl[i]=r*p/w; r*=(1-p); ans+=gl[i]*(find(n)-find(a[i].y)); } printf("%.2lf",(double)ans); return 0;}
- bzoj 4481: [Jsoi2015]非诚勿扰 树状数组+数学期望
- BZOJ 4481 [Jsoi2015] 非诚勿扰
- bzoj 4481 [Jsoi2015]非诚勿扰
- HDU5419Victor and Toys(树状数组+数学期望)
- bzoj 4475: [Jsoi2015]子集选取 数学
- [数学期望]BZOJ 1415
- BZOJ 1145 [CTSC 2008] 树状数组+组合数学
- bzoj 2762 树状数组
- bzoj 3155 树状数组
- bzoj 3594 树状数组
- bzoj 4472: [Jsoi2015]salesman
- bzoj 4474: [Jsoi2015]isomorphism
- bzoj 4488: [Jsoi2015]最大公约数
- bzoj 4488: [Jsoi2015]最大公约数
- BZOJ-1227 虔诚的墓主人 树状数组+离散化+组合数学
- 【JSOI2015】非诚勿扰
- bzoj 4487: [Jsoi2015]染色问题 (容斥原理+组合数学)
- 【树状数组】bzoj 1452 Count
- 《机器学习实战》总结与笔记
- java系统高并发解决方案(转载)
- 移动开发者的未来在哪里?
- 手机端App显示jsp页面的注意事项
- linux中vi的使用
- bzoj 4481: [Jsoi2015]非诚勿扰 树状数组+数学期望
- js同步和异步
- Java中静态代码块、非静态代码块以及构造函数的初始化顺序
- 创建型模式之单例模式
- FutureTask理解
- python + django + dwebsocket 实现简单的聊天室, 同时可作为监控实时在线的用户
- js 判断各种数据类型的简单方法
- mysql忘记密码的解决方法
- 我是如何进行code review的