有n棵树,初始时每棵树的高度为Hi,第i棵树每个月都会长高Ai。如今有个木料长度总量为S的订单,客户要求每块
木料的长度不能小于L,并且木料必须是整棵树(即不能为树的一部分)。如今问你最少须要等多少个月才能知足
订单。
Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 158 Solved: 61
[Submit][Status][Discuss]php
二分月份便可,但要注意一下二分的上界什么的,不要爆longlong;git
1 #include<cstdio> 2 #define LL long long 3 const int maxn=2e5+10; 4 inline LL max_(LL x,LL y){return x>y?x:y;} 5 LL n,m,k,ax; 6 LL a[maxn],b[maxn]; 7 bool ok(LL x){ 8 LL sum=m; 9 for(int i=1;i<=n;i++) 10 if(a[i]+x*b[i]>=k){ 11 sum-=a[i]+x*b[i]; 12 if(sum<=0) return 1; 13 } 14 return 0; 15 } 16 int main(){ 17 scanf("%lld%lld%lld",&n,&m,&k); 18 for(int i=1;i<=n;i++) scanf("%lld",&a[i]); 19 for(int i=1;i<=n;i++) scanf("%lld",&b[i]),ax=max_(ax,b[i]); 20 LL mid,l=0,r=1+max_(m,k)/ax; 21 while(l<r){ 22 mid=l+r>>1; 23 if(ok(mid)) r=mid; 24 else l=mid+1; 25 } 26 printf("%lld\n",l); 27 return 0; 28 }