hdu 3233 Download Manager(模拟题)
来源:互联网 发布:苹果软件购买记录 编辑:程序博客网 时间:2024/05/19 10:41
(2009 Asia Wuhan Regional Contest Hosted by Wuhan University)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3233
题意:给出一些文件需要下载,现在给出了文件的大小和已经下载的百分比,按照一定的下载顺序,求最后下载所有文件所需要的时间。下载的规则是:优先下载较小的文件,如果有大小相同的文件,优先已下载百分比较多的文件。
分析:按照优先规则排序,然后可以维护一个长度为m的数组,记录该文件剩余的字节,每次一定是字节最少的文件行下载完累加所需时间,然后更新剩余正在下载的m-1个文件的字节,直到所有文件都下载完,最后累加时间即为输出结果。
参考代码:
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;const double eps = 1e-7;struct node{ node(){} node(double _size,double _rem):size(_size),rem(_rem){} double size,rem;};node Q[1005],data[20005];bool cmp(node a,node b){ if(fabs(a.size-b.size) < eps) return a.rem > b.rem; return a.size < b.size;}double solve(int n,int m,double b){ int len = 0; double ans = 0; for(int i = 0;i < n;++i) { if(len < m) { double Size = data[i].size*(1-data[i].rem*0.01); if(fabs(Size) < eps) continue; Q[len++] = node(Size,0.0); for(int j = len-1;j > 0;--j) { if(Q[j].size < Q[j-1].size) swap(Q[j],Q[j-1]); else break; } } if(len == m) { double t = Q[0].size / (b / m),s = Q[0].size; ans += t; for(int j = 1;j < len;++j) { Q[j].size -= s; Q[j-1] = Q[j]; } len--; } } for(int i = 0;i < len;++i) { double t = Q[i].size / (b / (len-i)),s = Q[i].size; ans += t; for(int j = i;j < len;++j) Q[j].size -= s; } return ans;}int main(){ int n,m,b,casenum = 1; while(scanf("%d%d%d",&n,&m,&b) && n+m+b) { for(int i = 0;i < n;++i) scanf("%lf%lf",&data[i].size,&data[i].rem); sort(data,data+n,cmp); printf("Case %d: %.2lf\n\n",casenum++,solve(n,m,(double)b)); } return 0;}
- hdu 3233 Download Manager(模拟题)
- HDU 3233 - Download Manager
- HDU 3233 Download Manager
- HDU 3233 Download Manager
- HDU 3233 Download Manager
- HDU 3233 Download Manager [双向链表]
- Internet Download Manager(IDM) 破解绿化
- poj 1281 MANAGER(简单模拟题)
- Maxthon Download Manager
- Internet Download Manager 5.05
- Download Manager notes
- android download manager用法
- oracle access manager download
- Internet Download Manager
- CodeForces 7B Memory Manager(中等难度模拟题)
- Internet Download Manager v5.03
- Internet Download Manager ver.5.04
- IE custom download manager (IEDownloadManager)
- 黑马程序员---java面向对象思想
- 关于数据库排名函数的使用
- MFC使用NotifyIcon托盘应用程序
- css3
- 深入浅出LDD-6-异步通知
- hdu 3233 Download Manager(模拟题)
- uva147 - Dollars-------水题(精度注意)
- 那时,我们正年轻
- java多线程编程的常见陷阱(转~~)
- C# 登录QQ网站并获取QQ相关信息
- 学习OpenCV——计算邻接区域列表(build_adjoin)
- SQLServer中的@@IDENTITY,SCOPE_IDENTITY和IDENT_CURRENT
- 简单内存泄漏检测方法 解决 Detected memory leaks
- Perl 的线程中的共享