Codeforces 268E Playlist
2016-07-27 18:52
302 查看
题意:
有n首长度为l[i]的歌,每首歌Manao有p[i]的概率喜欢。在听歌时,若Manao听到了一首不喜欢的歌他会再听完这首歌后返回去听之前所有喜欢的歌。问Manao听完这n首歌的时间期望最大是多少。听歌的顺序由我们来安排。
思路:
对于两首歌a、b来说,我们有先听a再听b和先听b再听a的顺序选择,那么我们选择的依据是选一个对答案贡献最大的顺序,两种顺序对答案的贡献如何求呢?很简单。只有喜欢第一首歌并且不喜欢第二首歌我们才会在听完第二首歌后返回去听第一首歌,这时候他们的期望就为:la*pa*(1-pb)和lb*pb*(1-pa)。然后以这个为依据sort一遍就可以排好顺序了。然后如何求总的期望呢?假设现在听到第k首歌,那么它对答案的贡献为:(l1*p1+l2*p2+...+l[k-1]*p[k-1])*(1-p[k])即第k首歌不喜欢时才会返回去听之前的歌,才会对答案有贡献。
#include<cstdio>
#include<algorithm>
#define eps 1e-9
using namespace std;
const int MAX=50005;
struct Node{
double l,p;
}a[MAX];
bool cmp(Node a,Node b){
return a.l*a.p*(1-b.p)-b.l*b.p*(1-a.p)>eps;
}
int main(){
int n;
scanf("%d",&n);
double ans=0;
for(int i=0;i<n;i++){
scanf("%lf%lf",&a[i].l,&a[i].p);
a[i].p/=100.0;
ans+=a[i].l;
}
sort(a,a+n,cmp);
double tmp=0;
for(int i=0;i<n;i++){
ans+=tmp*(1-a[i].p);
tmp+=a[i].l*a[i].p;
}
printf("%.9lf\n",ans);
return 0;
}
有n首长度为l[i]的歌,每首歌Manao有p[i]的概率喜欢。在听歌时,若Manao听到了一首不喜欢的歌他会再听完这首歌后返回去听之前所有喜欢的歌。问Manao听完这n首歌的时间期望最大是多少。听歌的顺序由我们来安排。
思路:
对于两首歌a、b来说,我们有先听a再听b和先听b再听a的顺序选择,那么我们选择的依据是选一个对答案贡献最大的顺序,两种顺序对答案的贡献如何求呢?很简单。只有喜欢第一首歌并且不喜欢第二首歌我们才会在听完第二首歌后返回去听第一首歌,这时候他们的期望就为:la*pa*(1-pb)和lb*pb*(1-pa)。然后以这个为依据sort一遍就可以排好顺序了。然后如何求总的期望呢?假设现在听到第k首歌,那么它对答案的贡献为:(l1*p1+l2*p2+...+l[k-1]*p[k-1])*(1-p[k])即第k首歌不喜欢时才会返回去听之前的歌,才会对答案有贡献。
#include<cstdio>
#include<algorithm>
#define eps 1e-9
using namespace std;
const int MAX=50005;
struct Node{
double l,p;
}a[MAX];
bool cmp(Node a,Node b){
return a.l*a.p*(1-b.p)-b.l*b.p*(1-a.p)>eps;
}
int main(){
int n;
scanf("%d",&n);
double ans=0;
for(int i=0;i<n;i++){
scanf("%lf%lf",&a[i].l,&a[i].p);
a[i].p/=100.0;
ans+=a[i].l;
}
sort(a,a+n,cmp);
double tmp=0;
for(int i=0;i<n;i++){
ans+=tmp*(1-a[i].p);
tmp+=a[i].l*a[i].p;
}
printf("%.9lf\n",ans);
return 0;
}
相关文章推荐
- Mysql学习总结(6)——MySql之ALTER命令用法详细解读
- android studio menu
- 如何为rsyncd.conf增加一个module
- Mysql学习总结(5)——MySql常用函数大全讲解
- Linux执行可执行文件提示No such file or directory的解决办法
- AndroidStudio插件之GsonFormat
- JavaWeb中文件上传
- java旅行第三天
- Reveal的使用--整理自唐巧的《iOS开发进阶》
- uva
- poj3278 Catch That Cow(BFS)
- Ngnix 配置介绍 (配置,启动,重启)
- 使用 CXF 做 webservice 简单例子
- Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
- HDU 4586
- [算法学习笔记] AVL树----带有平衡条件的二叉搜索树
- 判断两个浮点数是否相等
- Mysql学习总结(3)——MySql语句大全:创建、授权、查询、修改等
- Python学习-sys、os相关
- linux驱动编写32位与64位设备注意事项