Bzoj4481 [Jsoi2015]非诚勿扰

Time Limit: 20 Sec  Memory Limit: 512 MB
Submit: 147  Solved: 75

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 佚名上传

数学问题 期望 脑洞题

期望还能这么玩儿,真的神奇。

女方如果选中某个人,可能是第一轮选中的,也可能是第一轮没选人,在第二轮选中的,也可能在第三轮,第四轮……

看上去是个无限项的等比数列求和。

利用等比数列公式计算女方选某个人的概率:

  $ \frac{a_1*(1-p^n)}{1-p}$

在n无穷大的时候$ p^n $趋近于0,可以直接忽视掉。

这样就可以算出这个位置被选的概率。

这样,之后开始选择的女方如果选了某个更靠前位置,就多了这么些概率贡献一个逆序对。

将边按双关键字排序,用树状数组维护一个类似逆序对的东西即可。

数据卡精度,需要long double

 1 /*by SilverN*/
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstdio>
 5 #include<cmath>
 6 #include<cstring>
 7 using namespace std;
 8 const int mxn=500010;
 9 int read(){
10     int x=0,f=1;char ch=getchar();
11     while(ch<‘0‘ || ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
12     while(ch>=‘0‘ && ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
13     return x*f;
14 }
15 struct edge{
16     int x,y;
17     bool operator < (const edge &b)const{
18         return ((x==b.x && y<b.y) || x<b.x);
19     }
20 }a[mxn],c[mxn];
21 //
22 int n,m;
23 int len[mxn];
24 long double P,pr[mxn];
25 long double t[mxn];
26 void add(int x,double v){while(x<=n){t[x]+=v;x+=x&-x;}}
27 long double ask(int x){double res=0.0;while(x){res+=t[x];x-=x&-x;}return res;};
28 inline long double GetP(int x,int y){return P*pr[y-1]/(1-pr[len[x]]);}
29 int main(){
30 //    freopen("in.txt","r",stdin);
31     n=read();m=read();scanf("%Lf",&P);
32     pr[0]=1.0;
33     for(int i=1;i<=m;i++){pr[i]=pr[i-1]*(1-P);}
34     for(int i=1;i<=m;i++){
35         a[i].x=read();a[i].y=read();len[a[i].x]++;
36     }
37     sort(a+1,a+m+1);
38     long double ans=0.0;
39     int hd=1;
40     for(int i=1;i<=n;i++){//枚举左边
41         if(a[hd].x!=i)continue;
42         int cnt=0;
43         while(a[hd].x==i){
44             ++cnt;
45             add(a[hd].y,GetP(i,cnt));
46             ans+=GetP(i,cnt)*(ask(n)-ask(a[hd].y));
47             hd++;
48         }
49     }
50     printf("%.2f\n",(double)ans);
51     return 0;
52 }
时间: 2024-08-10 14:55:33

Bzoj4481 [Jsoi2015]非诚勿扰的相关文章

待 题表

题表 达哥终极杂题表Bzoj2839 hdu6021 Codeforces 804DBzoj2248 hdu5575 Codeforces 786CBzoj2013 bzoj2676 Codeforces 803CBzoj2386 bzoj3782 Codeforces 813DBzoj2699 cogs1667 Codeforces 814DBzoj4798 bzoj2064 Codeforces 814EBzoj4639 bzoj3505 Codeforces 815ABzoj4417 bz

联赛之前的题表(已完成)汇总(可能有遗漏)

联赛之前的搞搞(其实是懒得分类) 博弈论 poj3537 poj1704 hdu5996两个插头 HDU1693 Eat the Trees COGS1283. [HNOI2004] 邮递员kdtree板子1941: [Sdoi2010]Hide and Seek旋转卡壳 pj2187凸包 cogs896 bzoj2829 信用卡凸包莫比乌斯反演基础 bzoj 4173 zhao gui lv bzoj 3529 mobiwus bzoj 4407 mobiwus bzoj 2818 mobiw

bzoj4481非诚勿扰(期望dp)

有n个女性和n个男性.每个女性的如意郎君列表都是所有男性的一个子集,并且可能为空.如果列表非空,她们会在其中选择一个男性作为自己最终接受的对象.将"如意郎君列表"中的男性按照编号从小到大的顺序呈现给她.对于每次呈现,她将独立地以P的概率接受这个男性(换言之,会以1?P的概率拒绝这个男性).如果她选择了拒绝,App就会呈现列表中下一个男性,以此类推.如果列表中所有的男性都已经呈现,那么会重新按照列表的顺序来呈现这些男性,直到她接受了某个男性为止.显然,在这种规则下,每个女性只能选择接受一

搞Solr这一年(本人QQ 282335345 群412268049 欢迎大家一起学习Solr 非诚勿扰)

搞Solr这一年 去年6月份毕业到现在已经快一年半了,很庆幸从事了搜索引擎这份工作,虽然谈不上有多深入,但至少已经入门了.在这一年半里,搞了3个月的hbase和mapreduce,搞了一个月的nutch,最后搞了一年的Solr.想当初刚参加项目的时候,大家对hbase.solr一点都不懂,通过慢慢摸索每日每夜的攻关,现在终于把产品做好了.那段一起奋斗的时光真让人怀念. 回想这一年里,前半段一直在做Solr的测试,测Solr的性能,测产品的规格,测最优的配置,那段时间其实蛮枯燥的.慢慢的,测试多了

4477: [Jsoi2015]字符串树

4477: [Jsoi2015]字符串树 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 156  Solved: 69[Submit][Status][Discuss] Description 萌萌买了一颗字符串树的种子,春天种下去以后夏天就能长出一棵很大的字 符串树.字符串树很奇特,树枝上都密密麻麻写满了字符串,看上去很复杂的样 子. [问题描述] 字符串树本质上还是一棵树,即N个节点N-1条边的连通无向无环图,节点 从1到N编号.与普通的树不

HDU 非诚勿扰 队列、(记一次失败的SBT尝试)

非诚勿扰 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 1312    Accepted Submission(s): 473 Problem Description 作为2013年699万应届毕业生中的一员,由于宏观经济的不景气,小明在毕业当天就华丽丽地失业了! 经历了千难万苦的求职过程,小明特别能理解毕业生的就业之难,所以,他现在

[BZOJ4472] [Jsoi2015]salesman(DFS/排序)

4472: [Jsoi2015]salesman Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 80  Solved: 45[Submit][Status][Discuss] Description 某售货员小T要到若干城镇去推销商品,由于该地区是交通不便的山区,任意两个城镇之间都只有唯一的可能经过其它城镇的路线. 小T 可以准确地估计出在每个城镇停留的净收益.这些净收益可能是负数,即推销商品的利润抵不上花费.由于交通不便,小T经过每个城镇都需要

HDU 4557 非诚勿扰(Treap找后继)

非诚勿扰 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 2202    Accepted Submission(s): 797 Problem Description 作为2013年699万应届毕业生中的一员,由于宏观经济的不景气,小明在毕业当天就华丽丽地失业了! 经历了千难万苦的求职过程,小明特别能理解毕业生的就业之难,所以,他现在

区间DP基础篇之 HDU4283——You Are the One(非诚勿扰)

题目大意: 有n个男屌丝事先按1,2,3,,,,,,n的顺序排好,每个人都有一个不开心值unhappy[i],如果第i个人第k个上台找对象,那么该屌丝男的不开心值就会为(k-1)*unhappy[i],因为在他前面有k-1个人嘛,导演为了让所有男屌的总不开心值最小,搞了一个小黑屋,可以通过小黑屋来改变男屌的出场顺序 注意:这个小黑屋是个栈,男屌的顺序是排好了的,但是可以通过入栈出栈来改变男屌的出场顺序 解题思路:(操度娘所知~度娘你好腻害) dp[i][j]表示区间[i,j]的最小总不开心值 把