题目描述

六一到了,为了庆祝这个节日,好多商家都推出了很多好玩的小游戏。Tongtong看到了一个猜球球的游戏,有n种除了颜色之外完全相同的球,商家从中拿出来一个球球放到了箱子里,已知第i种颜色的球出现在箱子里的概率为ai。Tongtong可以用下面这种方法来确定箱子中球的颜色:向商家提出猜测:“是第x种颜色的球球或第y种颜色的球球或...........中的一个”,商家会回答你的猜测是正确还是错误的,直到你有百分百的把握确定箱子里的球球,猜测的次数越少,Tongtong能够得到的礼物就更好。为了让Tongtong过一个开开心心的六一,请你找出一种最优的策略,尽可能少的向店主提出猜测来确定球的颜色,输出猜测次数的期望值。
策略“最优”是指:猜测次数的期望最小。当你有百分百的把握确定箱子里的球球颜色种类时,则不需要继续猜测。例如,如果有两种颜色的球球,箱子里放的是第二种颜色的球球,你可以猜测“是第一种颜色的球球”。商家会告诉你“错误”,所以你可以推测“箱子里的球球是第二种颜色的”,并且有百分百的把握,所以你就可以结束猜测而不需要额外的一次猜测。这种询问方式猜测次数为一次(不管你这一次有没有猜对)。

 

输入

第一行输入一个n,表示有n种颜色的球。 n<=2 000
第二行输入n个非负小数a1~an,表示是第i种颜色球球的概率,保证加和起来为1。

 

输出

输出最小期望,保留7位小数。

样例输入

3
0.5000000000 0.2500000000 0.2500000000

样例输出

1.5000000

提示

最佳策略下:第一次询问“是不是第二种颜色的球球或第三种颜色的球球中的一种”,如果回答“否”则可以知道是第一种颜色的球球,结束询问;如果回答是“是”则询问第二次“是不是第二种颜色的球球”。

官方题解:

因为任意一次询问和回答,都可以确定其中一半的球球集合包含目标球,另一半则不包含目标球。然后再对包含目标球的球球集合进一步划分,直到包含目标球的集合里只包含一个球,就可以百分百确定了。这样就得到了一个决策树(二叉形状),二叉决策树根节点到每个叶子的路到都是期中一种情况的解决方案,显然深度就是询问次数。 则有:期望=∑(询问次数*每种情况出现的概率)=∑(叶子对应的深度*它出现在盒子里的概率)。 而我们知道:这个公式 ∑(深度*元素出现的概率 ) 与某种编码方案的编码长度期望公式 相同。询问次数的期望最小也就是编码长度的期望最小。而解决这个问题的经典方法就是——哈夫曼树

然后需要注意的是,概率为0的球不用放入优先队列中。

 #include<cstdio>
#include<queue>
using namespace std;
int main()
{
int n;
while(~scanf("%d",&n))
{
priority_queue<double,vector<double>,greater<double> > q;
double x,y,ans=0.0;
while(n--)
{
scanf("%lf",&x);
if(x>0.0)
q.push(x);
}
while(q.size()>)
{
x=q.top();
q.pop();
y=q.top();
q.pop();
ans+=x+y;
q.push(x+y);
}
printf("%.7lf\n",ans);
}
return ;
}

哈夫曼树

第四届西安邮电大学acm-icpc校赛 猜球球的更多相关文章

  1. 第四届西安邮电大学acm-icpc校赛 热狗树

    题目描述  “我是番茄酱!”“我是黄芥末酱!”“合在一起就是——美式热狗上加的,那个!“热狗树上的每个节点都涂有番茄酱或者黄芥末酱中的一种,这样热狗树就变得美味了~LiMn2O4构造了一颗热狗树,他想 ...

  2. 第四届西安邮电大学acm-icpc校赛 流浪西邮之寻找火石碎片 多体积条件背包

    题目描述 众所周知,由于木星引力的影响,世界各地的推进发动机都需要进行重启.现在你接到紧急任务,要去收集火石碎片,重启西邮发动机.现在火石碎片已成为了稀缺资源,获得火石碎片需要钱或者需要一定的积分.火 ...

  3. 北方大学 ACM 多校训练赛 第七场 C Castle(LCA)

    [题意]给你N个点,N条不同的边,Q次询问,求出u,v之间的最短路. [分析]题意很简单,就是求最短路,但是Q次啊,暴力DIJ?当然不行,观察到这个题边的数目和点的数目是相同的,也就是说这个图是由一棵 ...

  4. 近几年ACM/ICPC区域赛铜牌题

    2013 changsha zoj 3726 3728 3736 3735 2013 chengdu hud 4786 4788 4790 2013 hangzhou hdu 4770 4771 47 ...

  5. 2016 ACM/ICPC 区域赛(北京) E 题 bfs

    https://vjudge.net/problem/UVALive-7672 题意    输入一个五位数n 问由12345变到n的操作最少次数 不可达输出-1 有三种操作 1.交换相邻的位置 次数不 ...

  6. 2014哈商大ICPC/ACM校赛解题报告

    被debug邀请去參加校赛,哎,被虐..我对不起工大.. 由于本人不搞ACM,算法处于HelloWorld水准.. 虽然题目除了鸟不拉屎星人之外都非常水,但我能做到这个程度,全然是超水平发挥了.. 数 ...

  7. 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)

    队名:Unlimited Code Works(无尽编码)  队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...

  8. 山东省ACM多校联盟省赛个人训练第六场 poj 3335 D Rotating Scoreboard

    山东省ACM多校联盟省赛个人训练第六场 D Rotating Scoreboard https://vjudge.net/problem/POJ-3335 时间限制:C/C++ 1秒,其他语言2秒 空 ...

  9. 2014上半年acm总结(1)(入门+校赛)

    大一下学期才开始了acm,不得不说有一点迟,但是acm确实使我的生活充实了很多,,不至于像以前一样经常没事干=  = 上学期的颓废使我的c语言学的渣的一笔..靠考前突击才基本掌握了语法 寒假突然醒悟, ...

随机推荐

  1. RabbitMQ快速开始

    ①:安装rabbitmq所需要的依赖包 yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make g ...

  2. 第6章:使用Python监控Linux系统

    1.Python编写的监控工具 1).多功能系统资源统计工具dstat dstat是一个用Python编写的多功能系统资源统计工具,用来取代Linux下的vmstat,iostat,netstat和i ...

  3. 【Trie】The XOR Largest Pair

    [题目链接] https://loj.ac/problem/10050 [题意] 给出n个数,其中取出两个数来,让其异或值最大. [题解] 经典的01字典树问题. 首先需要把01字典树建出来. 然后对 ...

  4. MongoDB实战读书笔记(一):JavaScript shell操作MongoDB

    1 基本增删改查 基本概念: 数据库:同关系型数据库 集合:类似关系型数据库的表 文档:类似关系型数据库的行 字段:类似关系型数据库的列 操作: insert:新增,若新增数据的主键已经存在,则会抛异 ...

  5. sql游标循环

    DECLARE @begindate DATETIME=CONVERT(DATETIME, '2019.05.06 09:40:50') ,@enddate DATETIME =GETDATE() , ...

  6. git merge 命令的使用

    我们把dev分支的工作成果合并到master分支上: $ git merge dev Updating d46f35e..b17d20e Fast-forward readme.txt | 1 + 1 ...

  7. SQL优化的总结和一些避免全盘扫描的注意事项

    1.应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描. 2.应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一 ...

  8. DDOS 攻击的防范教程--转载自阮一峰的博客

    一个多月前,我的个人网站遭受 DDOS 攻击,下线了50多个小时.这篇文章就来谈谈,如何应对这种攻击. 需要说明的是,我对 DDOS 并不精通,从没想过自己会成为攻击目标.攻击发生以后,很多素昧平生的 ...

  9. Web应用特性

    什么是web应用? 软件开发架构 c/s架构 客户端 服务端 b/s架构 浏览器 服务器 本质:b/s架构其实也是c/s架构 HTTP协议 超文本传输协议:规定了客户端与服务端消息传输的格式 四大特性 ...

  10. 一周死磕fastreport ----ASP.NET (一)

    https://blog.csdn.net/wuyuander/article/details/52692435 原文链接,点击跳转 首先是安装好FastReport .net: 然后在vs2012中 ...