[JSOI2015]非诚勿扰
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
0.5
5 1
3 2
2 2
2 1
3 1
Sample Output
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
struct ZYYS
{
int u,v;
double d;
}e[];
struct Node
{
int next,to;
double dis;
}edge[];
double ans,p,c[];
int num,head[],n,m,du[],l[];
bool cmp(ZYYS a,ZYYS b)
{
if (a.u==b.u) return a.v<b.v;
return a.u>b.u;
}
double qpow(double x,int y)
{
double res=1.0;
while (y)
{
if (y&) res=res*x;
x=x*x;
y/=;
}
return res;
}
void add(int u,int v,double d)
{
num++;
edge[num].next=head[u];
head[u]=num;
edge[num].to=v;
edge[num].dis=d;
}
void update(int x,double d)
{
while (x<=n)
{
c[x]+=d;
x+=(x&(-x));
}
}
double query(int x)
{
double s=;
while (x)
{
s+=c[x];
x-=(x&(-x));
}
return s;
}
int main()
{int i,u,v,j;
cin>>n>>m;
cin>>p;
for (i=;i<=m;i++)
{
scanf("%d%d",&u,&v);
e[i].u=u;e[i].v=v;
du[u]++;
}
sort(e+,e+m+,cmp);
for (i=;i<=m;i++)
{
l[e[i].u]++;
e[i].d=qpow(-p,l[e[i].u]-)*p;
e[i].d/=-qpow(-p,du[e[i].u]);
add(e[i].u,e[i].v,e[i].d);
}
for (i=n;i>=;i--)
{
for (j=head[i];j;j=edge[j].next)
{
int v=edge[j].to;
ans+=edge[j].dis*query(v-);
}
for (j=head[i];j;j=edge[j].next)
{
int v=edge[j].to;
update(v,edge[j].dis);
}
}
printf("%.2lf\n",ans);
}
[JSOI2015]非诚勿扰的更多相关文章
- BZOJ4481: [Jsoi2015]非诚勿扰【概率期望+树状数组】
Description [故事背景] JYY赶上了互联网创业的大潮,为非常勿扰开发了最新的手机App实现单身 大龄青年之间的"速配".然而随着用户数量的增长,JYY发现现有速配的算 ...
- Bzoj4481 [Jsoi2015]非诚勿扰
Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 147 Solved: 75 Description [故事背景] JYY赶上了互联网创业的大潮,为非 ...
- BZOJ4481 JSOI2015非诚勿扰(概率期望+树状数组)
首先求出每个女性接受某个男性的概率.这个概率显然是一个无穷等比数列求和. 然后按编号从小到大考虑每个女性,维护出每个男性被选择的期望次数,BIT上查询后缀和即可. 需要long double. #in ...
- bzoj 4481: [Jsoi2015]非诚勿扰【期望+树状数组】
首先很容易计算对于一个如意郎君列表里有x个男性的女性,编号排第i位的男性被选的概率是 \[ p*(1-p)^{i-1}+p*(1-p)^{i-1+n}+p*(1-p)^{i-1+n}+- \] \[ ...
- [暑假的bzoj刷水记录]
(这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊 堆一起算了 隔一段更新一下. 7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 「JSOI2015」非诚勿扰
「JSOI2015」非诚勿扰 传送门 我们首先考虑一名女性选中她列表里第 \(x\) 名男性的概率(假设她列表里共有 \(s\) 名男性): \[ P = p \times (1 - p) ^ {x ...
- 【BZOJ4481&JSOI2015】非诚勿扰(数学期望)
听说JSOI有版权问题就不放图了 如果前面的文章里的图需要删掉请通知我 题意:有一些女的要挑一些男的,挑中的几率均为p.一个男的可以无限次被挑中.若女a选中男b,女c选中男d,a<c,b> ...
- JSOI2015 Round1——完挂
感觉眼前天地转了转…… Day 0 和zxy,zyh一同坐车去扬中,同行的还有llr 路上zyh基本在睡觉…… 入住的宾馆各种坑爹,同一层住的两个房间一个有网一个没网 我有幸入住了有网的房间,zyh在 ...
随机推荐
- JavaScript(第三天)【数据类型】
学习要点: 1.typeof操作符 2.Undefined类型 3.Null类型 4.Boolean类型 5.Number类型 6.String类型 7.Object类型 ECMAScript中有5种 ...
- C语言指针作业总结
学号 姓名 作业地址 PTA实验作业5 PTA排名2 阅读代码2 总结1 代码规范 总分 是否推荐博客 推荐理由 32 **薇 http://www.cnblogs.com/linyiwei/p/80 ...
- Flask 扩展 用户会话
pip install flask-login 接下来创建扩展对象实例: from flask import Flask from flask_login import LoginManager ap ...
- Java ftp 上传文件和下载文件
今天同事问我一个ftp 上传文件和下载文件功能应该怎么做,当时有点懵逼,毕竟我也是第一次,然后装了个逼,在网上找了一段代码发给同事,叫他调试一下.结果悲剧了,运行不通过.(装逼失败) 我找的文章链接: ...
- Linux 帳號管理與 ACL 權限設定
1. Linux 的账号与群组1.1 使用者识别: UID 与 GID1.2 使用者账号:/etc/passwd, /etc/shadow1.3 关于群组: 有效与初始群组. groups, newg ...
- day-4 python多进程编程知识点汇总
1. python多进程简介 由于Python设计的限制(我说的是咱们常用的CPython).最多只能用满1个CPU核心.Python提供了非常好用的多进程包multiprocessing,他提供了一 ...
- css3动画transition详解
一.transition-property 语法: transition-property : none | all | [ <IDENT> ] [ ',' <IDENT> ] ...
- vue 手机端开发 小商铺 添加购物车 以及结算 功能
这个功能绕了我一天!!! 对 就是这个功能 一系列相关联的 四处相关联 现在加班 没时间更 过两天在更
- 【编程开发】PHP---面向对象
面向对象编程 类:在现实世界中,任何事物都有种类的概念:车 类是由特征和行为构成的. 特征:都是不动的,从出厂的时候就已经内置好了(属性) 行为:一种动的状态.(方法(函数)) 行为依赖于这些特征,而 ...
- N阶台阶问题(详解)
原创 问题描述: 有N阶台阶,每一步可以走1步台阶或者2步台阶,求出走到第N阶台阶的方法数. 解题思路: 类似于建立树的过程 1 2 1 2 1 2 1 2 1 2 ...