「JSOI2015」非诚勿扰
「JSOI2015」非诚勿扰
我们首先考虑一名女性选中她列表里第 \(x\) 名男性的概率(假设她列表里共有 \(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」非诚勿扰的更多相关文章
- 「JSOI2015」串分割
「JSOI2015」串分割 传送门 首先我们会有一个贪心的想法:分得越均匀越好,因为长的绝对比短的大. 那么对于最均匀的情况,也就是 \(k | n\) 的情况,我们肯定是通过枚举第一次分割的位置,然 ...
- 「JSOI2015」isomorphism
「JSOI2015」isomorphism 传送门 我们还是考虑树哈希来判同构. 但是我们需要使用一些特殊的手段来特殊对待假节点. 由于是无向树,我们首先求出重心,然后以重心为根跑树哈希. 此处我们不 ...
- 「JSOI2015」symmetry
「JSOI2015」symmetry 传送门 我们先考虑构造出原正方形经过 \(4\) 种轴对称变换以及 \(2\) 种旋转变换之后的正方形都构造出来,然后对所得的 \(7\) 个正方形都跑一遍二维哈 ...
- 「JSOI2015」地铁线路
「JSOI2015」地铁线路 传送门 第一问很简单:对于每条线路建一个点,然后所有该条线路覆盖的点向它连边,权值为 \(1\) ,然后它向所有线路上的点连边,权值为 \(0\) . 然后,跑一边最短路 ...
- 「JSOI2015」染色问题
「JSOI2015」染色问题 传送门 虽然不是第一反应,不过还是想到了要容斥. 题意转化:需要求满足 \(N + M + C\) 个条件的方案数. 然后我们就枚举三个数 \(i, j, k\) ,表示 ...
- 「JSOI2015」圈地
「JSOI2015」圈地 传送门 显然是最小割. 首先对于所有房子,权值 \(> 0\) 的连边 \(s \to i\) ,权值 \(< 0\) 的连边 \(i \to t\) ,然后对于 ...
- 「JSOI2015」最小表示
「JSOI2015」最小表示 传送门 很显然的一个结论:一条边 \(u \to v\) 能够被删去,当且仅当至少存在一条其它的路径从 \(u\) 通向 \(v\) . 所以我们就建出正反两张图,对每个 ...
- 「JSOI2015」套娃
「JSOI2015」套娃 传送门 考虑贪心. 首先我们假设所有的套娃都互相不套. 然后我们考虑合并两个套娃 \(i\),\(j\) 假设我们把 \(i\) 套到 \(j\) 里面去,那么就可以减少 \ ...
- 「JSOI2015」salesman
「JSOI2015」salesman 传送门 显然我们为了使收益最大化就直接从子树中选大的就好了. 到达次数的限制就是限制了可以选的子树的数量,因为每次回溯上来都会减一次到达次数. 多种方案的判断就是 ...
随机推荐
- 二分-D - Can you solve this equation?
D - Can you solve this equation? Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,can you ...
- 洛谷P1093 奖学金
https://www.luogu.org/problem/P1093 #include <bits/stdc++.h> using namespace std; struct Node{ ...
- 《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令
3 命令 Fabrics命令用于创建队列和初始化controller.Fabrics命令的Opcode字段填写0x7F.无论controller是否处于使能状态(CC.EN)Fabrics命令都会被处 ...
- 题解 【Codeforces988E】Divisibility by 25
本题是数论好题! 首先我们需要了解一个关于数论的性质: 一个数只要后两位能被25(或4)整除,这个数就能被25(或4)整除. 同理,后三位:(或8).后四位:(或16)亦是如此. 所以,我们只需要判断 ...
- 高端OLED电视成行业突破口,苏宁助力显示技术市场迭代
编辑 | 于斌 出品 | 于见(mpyujian) 在电商与线上渠道越来越占据举足轻重地位的年代,电商平台巨头们越来越有底气喊出"推动行业技术升级"的口号.的确,再好的技术升级也需 ...
- java 发送简单邮件(不带附件)
引入依赖 邮件实体类 可用邮件服务器地址(网易为例) 邮件工具类 import com.me.beans.Mail; import lombok.extern.slf4j.Slf4j; import ...
- 【NOIP2012普及组】寻宝
这道实际难度入门的题做得真™要麻烦死我,由于摸不到电脑,在大脑里调了3天都翻不转!! P1076 寻宝 思路:暴力模拟(这是基础,单纯暴力据说会全部TLE)+取模优化(这样时间复杂度骤降到O(NM)) ...
- css 页面滚动 多背景固定不动
经常看到一些网站,滚动页面但是背景图不会跟着滚动,好像一直固定在浏览器窗口,感觉挺酷的,哇哦 ~ ~ 原来都是 background-attachment 这位大兄弟的功劳 background-at ...
- sql server下载教程
进入官网:https://www.microsoft.com/zh-cn/download/details.aspx?id=29066 点击下载即可: 安装教程:可去csdn下载: win10系统下安 ...
- 阿里巴巴手册之-Arrays.asList()数组转集合的问题
转载来源:https://blog.csdn.net/qq_36443497/article/details/79663663?utm_source=blogxgwz9 在使用工具类Arrays.as ...