有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 }