注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

fudq's AC Road

何以解忧,唯有AC!

 
 
 

日志

 
 

hdu 4957 Poor Mitsui  

2014-08-18 11:47:51|  分类: ACM-hdu |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
http://acm.hdu.edu.cn/showproblem.php?pid=4957
题意:拿n只破的木桶去接水,每只木桶漏水速度为a[i],最后要得到b[i]单位的水,自来水的出水速度为V,木桶里只要有水就会漏水,每次只能接一只木桶。问最短需要多少时间,每只木桶里的水为b[i].
题解:
贪心。从最后一只往前推,第i只木桶的时间T=(b[i]+t*a[i])/(V-a[i]),t为之前所有木桶接水的时间,化简得到(b[i]/a[i]+t)/(V/a[i]-1),为使得T最小,可以发现让b[i]/a[i]达到最小即可,所以按照b[i]/a[i]来排即可。

struct Node{
int a,b;
}node[110];
int n,V;

bool cmp(Node x,Node y)
{
if(x.b*y.a < y.b*x.a)
return true;
return false;
}

void fun()
{
double ans=0;
for(int i=0;i<n;i++)
{
if(node[i].b == 0)
continue;
double tim=node[i].b+node[i].a*1.0*(ans);
ans=ans+tim*1.0/(V-node[i].a);
}
printf("%.0f\n",ans);
}

int main()
{
#ifndef ONLINE_JUDGE
freopen("testin.txt", "r", stdin);
// freopen("testout.txt", "w", stdout);
#endif
int T;
sf(T);
while(T--)
{
sf2(n,V);
int flag=0;
fr(n) sf(node[i].a);
fr(n) sf(node[i].b);
fr(n){
if(node[i].a >= V && node[i].b != 0) //如果速度不满足,如果b[i]!=0才不符合条件
flag=1;
}
if(flag == 1)
{
pf(-1);
continue;
}
sort(node,node+n,cmp);
fun();
}
return 0;
}


  评论这张
 
阅读(214)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017