「JSOI2015」非诚勿扰

传送门

我们首先考虑一名女性选中她列表里第 \(x\) 名男性的概率(假设她列表里共有 \(s\) 名男性):

\[P = p \times (1 - p) ^ {x - 1} + p \times (1 - p) ^ {s + x - 1} + p \times (1 - p) ^ {2s + x - 1} + \cdots + p \times (1 - p) ^ {ns + x - 1}
\]

根据等比数列求和公式以及极限的相关计算,不难求出:

\[P = \frac{p \times (1 - p) ^ {x - 1}}{1 - (1 - p) ^ s}
\]

然后我们发现题目要求的是类似于逆序对的东西,但是我们要清楚这个期望怎么算。

由于期望具有可加性,所以我们就可以对每 \(1\) 的贡献都算一遍期望,这个是很好算的,然后我们发现还可以用树状数组维护,其实就是相当于把可以造成贡献的部分提了个公因式然后对于后面那一大堆用前缀和来搞。

还有就是这题好像要开 long double 才行。

参考代码:

#include <algorithm>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <cmath>
#define rg register
#define file(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout)
using namespace std;
template < class T > inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while ('0' > c || c > '9') f |= c == '-', c = getchar();
while ('0' <= c && c <= '9') s = s * 10 + c - 48, c = getchar();
s = f ? -s : s;
} const int _ = 5e5 + 5; int n, m; long double p;
vector < int > vec[_]; struct BIT {
long double tr[_];
inline void update(int x, long double v) { for (rg int i = x; i <= m; i += i & -i) tr[i] += v; }
inline long double query(int x) { long double res = 0.0; for (rg int i = x; i >= 1; i -= i & -i) res += tr[i]; return res; }
} tr; int main() {
#ifndef ONLINE_JUDGE
file("cpp");
#endif
read(n), read(m), scanf("%Lf", &p);
for (rg int u, v, i = 1; i <= m; ++i) read(u), read(v), vec[u].push_back(v);
for (rg int i = 1; i <= n; ++i) sort(vec[i].begin(), vec[i].end());
long double ans = 0.0, P;
for (rg int i = 1; i <= n; ++i) {
P = p / (1.0 - pow(1.0 - p, (long double) vec[i].size()));
for (rg int j = 0; j < vec[i].size(); ++j, P *= (long double) 1.0 - p)
ans += P * (tr.query(m) - tr.query(vec[i][j])), tr.update(vec[i][j], P);
}
printf("%.2Lf\n", ans);
return 0;
}

「JSOI2015」非诚勿扰的更多相关文章

  1. 「JSOI2015」串分割

    「JSOI2015」串分割 传送门 首先我们会有一个贪心的想法:分得越均匀越好,因为长的绝对比短的大. 那么对于最均匀的情况,也就是 \(k | n\) 的情况,我们肯定是通过枚举第一次分割的位置,然 ...

  2. 「JSOI2015」isomorphism

    「JSOI2015」isomorphism 传送门 我们还是考虑树哈希来判同构. 但是我们需要使用一些特殊的手段来特殊对待假节点. 由于是无向树,我们首先求出重心,然后以重心为根跑树哈希. 此处我们不 ...

  3. 「JSOI2015」symmetry

    「JSOI2015」symmetry 传送门 我们先考虑构造出原正方形经过 \(4\) 种轴对称变换以及 \(2\) 种旋转变换之后的正方形都构造出来,然后对所得的 \(7\) 个正方形都跑一遍二维哈 ...

  4. 「JSOI2015」地铁线路

    「JSOI2015」地铁线路 传送门 第一问很简单:对于每条线路建一个点,然后所有该条线路覆盖的点向它连边,权值为 \(1\) ,然后它向所有线路上的点连边,权值为 \(0\) . 然后,跑一边最短路 ...

  5. 「JSOI2015」染色问题

    「JSOI2015」染色问题 传送门 虽然不是第一反应,不过还是想到了要容斥. 题意转化:需要求满足 \(N + M + C\) 个条件的方案数. 然后我们就枚举三个数 \(i, j, k\) ,表示 ...

  6. 「JSOI2015」圈地

    「JSOI2015」圈地 传送门 显然是最小割. 首先对于所有房子,权值 \(> 0\) 的连边 \(s \to i\) ,权值 \(< 0\) 的连边 \(i \to t\) ,然后对于 ...

  7. 「JSOI2015」最小表示

    「JSOI2015」最小表示 传送门 很显然的一个结论:一条边 \(u \to v\) 能够被删去,当且仅当至少存在一条其它的路径从 \(u\) 通向 \(v\) . 所以我们就建出正反两张图,对每个 ...

  8. 「JSOI2015」套娃

    「JSOI2015」套娃 传送门 考虑贪心. 首先我们假设所有的套娃都互相不套. 然后我们考虑合并两个套娃 \(i\),\(j\) 假设我们把 \(i\) 套到 \(j\) 里面去,那么就可以减少 \ ...

  9. 「JSOI2015」salesman

    「JSOI2015」salesman 传送门 显然我们为了使收益最大化就直接从子树中选大的就好了. 到达次数的限制就是限制了可以选的子树的数量,因为每次回溯上来都会减一次到达次数. 多种方案的判断就是 ...

随机推荐

  1. 浅谈C#委托的用法-delegate

    2018年11月7日     小雨 一.委托的概念 委托和类一样是一种用户自定义类型,它存储的就是一系列具有相同签名和返回类型的方法的地址,调用委托的时候,它所包含的所有方法都会被执行. 借用百度上的 ...

  2. 忘记本地MySQL数据库密码的解决方法

    平台:win7 1.打开cmd窗口,进入 MySQL的安装目录. 2.停止MySQL的服务.已经停止了. 右键MySQL,看到启动是可点击的,证明MySQL服务已停止运行. 3.将root用户对数据库 ...

  3. Django | pycharm 提示 unresolved attribute referene 'objects' for class 'xxxx'

    objects高亮,提示信息为unresolved attribute referene 'objects' for class 'BookInfo' 当前情况是pycharm没有识别到objects ...

  4. Linux - Shell - 替换文件名中的空格

    概述 使用 shell 替换 文件名中的空格 背景 尝试用 find 配合 xargs, 在多个文件里找关键字 出现了问题 有空格的文件名, 并不是很好处理 准备 os centos7 1. 问题: ...

  5. Allegro---层叠结构设置

     PCB层叠结构 层叠结构是一个非常重要的问题,不可忽视,一般选择层叠结构考虑以下原则: ·元件面下面(第二层)为地平面,提供器件屏蔽层以及为顶层布线提供参考平面: ·所有信号层尽可能与地平面相邻: ...

  6. Spring Boot的27个注解【核心】

    导读[约定大于配置] Spring Boot方式的项目开发已经逐步成为Java应用开发领域的主流框架,它不仅可以方便地创建生产级的Spring应用程序,还能轻松地通过一些注解配置与目前比较火热的微服务 ...

  7. zookeeper入门之介绍与安装

    一:zookeeper是什么 What is ZooKeeper? ZooKeeper is a centralized service for maintaining configuration i ...

  8. [CERC2014] Outer space invaders

    题目链接 题意 你受到一群外星人的攻击,第 $i$ 个外星人会在 $ai$ 时间出现,与你的距离为 $di$,且必须在 $bi$ 时间前消灭.你有一个区域冲击波器,每次攻击可以设定一个功率 $R$,这 ...

  9. OpenCV图像载入、显示和输出到文件以及滑块的使用

    图像载入 imread()函数 Mat imread(const string& filename, int flags = 1); 第一个参数为文件名 第二个参数为载入标识 flags &g ...

  10. python 日志模块 日志格式

    形如: formatter = logging.Formatter("%(asctime)s %(levelname)s %(message)s","%Y%b%d-%H: ...