[概率] HDU 2019 Multi-University Training Contest 10 - Valentine's Day
Valentine's Day
Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)
Total Submission(s): 0 Accepted Submission(s): 0
Special Judge
There are n presents in the shop, and Oipotato can choose to buy some of them. We know that his girlfriend will possibly feel extremely happy if she receives a present. Therefore, if Oipotato gives k presents to his girlfriend, she has k chances to feel extremely happy. However, Oipotato doesn't want his girlfriend to feel extremely happy too many times for the gifts.
Formally, for each present i, it has a possibility of Pi to make Oipotato's girlfriend feel extremely happy. Please help Oipotato decide what to buy and maximize the possibility that his girlfriend feels extremely happy for exactly one time.
The first line contains an integer n (1≤n≤10 000), indicating the number of possible presents.
The second line contains n decimals Pi (0≤Pi≤1) with exactly six digits after the decimal point, indicating the possibility that Oipotato's girlfriend feels extremely happy when receiving present i.
It is guaranteed that the sum of n in all test cases does not exceed 450000.
3
0.100000 0.200000 0.900000
3
0.100000 0.300000 0.800000
0.800000000000
题意:
有n种商品,每种商品有pi的概率让女朋友非常开心,现在问买那些商品才能让女朋友恰好非常开心一次的概率最大
思路:
记p为恰好让女朋友非常开心一次的概率,p=Σ(i=1->m)pi*π(j=1->m且i!=j)(1-pj),算了一些样例后发现如果pi>0.5,那么无论再买那些商品都会让总概率变小,
如果pi==0.5,则无论再买那些商品都会让总概率=0.5,所以如果存在pi>=0.5,则我们就取一个最大的大于等于0.5概率的商品,否则商品概率都小于0.5时,
队友通过打表发现将商品排序后,从最大的那个开始连续取,总概率会先递增再递减,且只有一个极大值,现在的问题是最坏的情况是要遍历所有商品,复杂度为O(n)
每次都要重新计算总概率,计算总概率的复杂度为O(n*n),所以这样的总复杂度为O(n*n*n),而题目中n最大为1e4,显然n的立方的复杂度是不能接受的,
遍历的O(n)没什么办法优化,但我们可以把计算总概率的O(n*n)的复杂度降为O(n),这样O(n*n)的复杂度是能支持1e4的数据的,所以现在的问题就是怎么优化计算
原始公式为p=Σ(i=1->m)pi*π(j=1->m且i!=j)(1-pj),可以将其转换为,p=Σ(i=1->m)pi*π(j=1->m)(1-pj)/(1-pi),因为π(j=1->m)(1-pj)与i无关,所以可以把他从累加中提出来,
转换为p=[Σ(i=1->m)pi/(1-pi)]*[π(j=1->m)(1-pj)],于是可以O(n)地计算Σ(i=1->m)pi/(1-pi)和π(j=1->m)(1-pj),最后将两者相乘即为总概率

#include<bits/stdc++.h>
using namespace std;
const int amn=1e4+;
struct node{
double p,q;
}nm[amn];
double p[amn],q[amn],ans,cnt,maxn,aa,s,t;
bool cmp(node a,node b){
if(a.p==b.p)return a.q<b.q;
return a.p>b.p;
}
int main(){
int n,T,tp;
ios::sync_with_stdio();
scanf("%d",&T);
while(T--){
scanf("%d",&n);
tp=maxn=;
aa=;
for(int i=;i<=n;i++){
scanf("%lf",&nm[i].p);
maxn=max(maxn,nm[i].p);
nm[i].q=-nm[i].p;
}
if(maxn>=0.5){
ans=maxn;
}
else{
tp=maxn=;
sort(nm+,nm++n,cmp);
ans=nm[].p;
for(int i=;i<=n;i++){
s=,t=;
for(int j=;j<=i;j++)s+=nm[j].p/nm[j].q;
for(int j=;j<=i;j++)t*=nm[j].q;
if(s*t>ans)
ans=s*t;
else break;
}
}
printf("%.12lf\n",ans);
}
}
/**
有n种商品,每种商品有pi的概率让女朋友非常开心,现在问买那些商品才能让女朋友恰好非常开心一次的概率最大
记p为恰好让女朋友非常开心一次的概率,p=Σ(i=1->m)pi*π(j=1->m且i!=j)(1-pj),算了一些样例后发现如果pi>0.5,那么无论再买那些商品都会让总概率变小,
如果pi==0.5,则无论再买那些商品都会让总概率=0.5,所以如果存在pi>=0.5,则我们就取一个最大的大于等于0.5概率的商品,否则商品概率都小于0.5时,
队友通过打表发现将商品排序后,从最大的那个开始连续取,总概率会先递增再递减,且只有一个极大值,现在的问题是最坏的情况是要遍历所有商品,复杂度为O(n)
每次都要重新计算总概率,计算总概率的复杂度为O(n*n),所以这样的总复杂度为O(n*n*n),而题目中n最大为1e4,显然n的立方的复杂度是不能接受的,
遍历的O(n)没什么办法优化,但我们可以把计算总概率的O(n*n)的复杂度降为O(n),这样O(n*n)的复杂度是能支持1e4的数据的,所以现在的问题就是怎么优化计算
原始公式为p=Σ(i=1->m)pi*π(j=1->m且i!=j)(1-pj),可以将其转换为,p=Σ(i=1->m)pi*π(j=1->m)(1-pj)/(1-pi),因为π(j=1->m)(1-pj)与i无关,所以可以把他从累加中提出来,
转换为p=[Σ(i=1->m)pi/(1-pi)]*[π(j=1->m)(1-pj)],于是可以O(n)地计算Σ(i=1->m)pi/(1-pi)和π(j=1->m)(1-pj),最后将两者相乘即为总概率
**/
[概率] HDU 2019 Multi-University Training Contest 10 - Valentine's Day的更多相关文章
- [二分,multiset] 2019 Multi-University Training Contest 10 Welcome Party
Welcome Party Time Limit: 4000/4000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)T ...
- hdu 5416 CRB and Tree(2015 Multi-University Training Contest 10)
CRB and Tree Time Limit: 8000/4000 MS (J ...
- 2015 Multi-University Training Contest 10 hdu 5406 CRB and Apple
CRB and Apple Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- 2015 Multi-University Training Contest 10 hdu 5412 CRB and Queries
CRB and Queries Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- 2016 Multi-University Training Contest 10
solved 7/11 2016 Multi-University Training Contest 10 题解链接 分类讨论 1001 Median(BH) 题意: 有长度为n排好序的序列,给两段子 ...
- 2015 Multi-University Training Contest 10(9/11)
2015 Multi-University Training Contest 10 5406 CRB and Apple 1.排序之后费用流 spfa用stack才能过 //#pragma GCC o ...
- hdu 4946 2014 Multi-University Training Contest 8
Area of Mushroom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- hdu 4864 Task---2014 Multi-University Training Contest 1
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4864 Task Time Limit: 4000/2000 MS (Java/Others) M ...
- hdu 4937 2014 Multi-University Training Contest 7 1003
Lucky Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) T ...
随机推荐
- golang xml解析
第二章里还提到了xml的解析部分.之前有想整理下encoding包下常用的几个文件格式的处理.这次刚好整理下xml的部分.先上例子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 ...
- USB小白学习之路(8)FX2LP cy7c68013A——Slave FIFO 与FPGA通信(转)
此博客转自CSDN:http://blog.csdn.net/xx116213/article/details/50535682 这个博客只对自己理解CY7C68013的配置有一定的帮助,对于配置CY ...
- shell编程1:变量的使用与例子
一.Shell脚本的执行通常可以采用以下几种方式: 1):bash script-name或sh script-name(推荐使用) 2):path/script-name 或./script-nam ...
- iOS 使用系统的UITabBarController 修改展示的图片大小
1. 设置TabBarItem图片的大小 1 - (void)configurationAppTabBarAndNavigationBar { // 选中的item普通状态图片的大小 UIImage ...
- 7-44 jmu-python-区间数之和 (10 分)
输入一个区间,计算里面能被3整除或被5整除的数和. 输入格式: 每行输入一个数据,代表区间左界和右界.区间包含左界和右界.数据必须是整数. 输出格式: 满足条件数和. 输入样例: 2 10 输出样例: ...
- Failed to open the key database file. c;\\User\\w\\Destop\\SecureCRT_FX6.5.3\\Config\\KnowHosts\\Hostsmap.txt这个问题的解决方法
1.首先将这段错误在百度翻译上面查询一下,是什么意思,查询结果如下: 打开密钥数据库文件失败.C:\用户\ w \平台\ securecrt_fx6.5.3 \\ \\ \\ hostsmap.txt ...
- 前端每日实战:149# 视频演示如何用纯 CSS 创作一个宝路薄荷糖的动画
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/oagrvz 可交互视频 此视频是可 ...
- PySide2的This application failed to start because no Qt platform plugin could be initialized解决方式
解决PySide2的This application failed to start because no Qt platform plugin could be initialized问题 今天在装 ...
- IDEA Messages Build总是自动弹出提示错误
IDEA,总是在代码未完成时,在进行切换页面回来后会跳出Messages Build,我相信大家在写java web项目的时候,经常会遇到这个问题,接下来我就和大家说一下问题所在. 主要原因是因为我们 ...
- yuchuan_Linux_C 编程之七系统IO函数
一.整体大纲 二. 系统IO函数 1. 一些概念 文件描述符 PCB C库函的IO缓冲区 1) 文件描述符 int 类型 一个进程最多 ...