有n棵樹,初始時每棵樹的高度爲Hi,第i棵樹每個月都會長高Ai。如今有個木料長度總量爲S的訂單,客戶要求每塊
木料的長度不能小於L,並且木料必須是整棵樹(即不能爲樹的一部分)。如今問你最少須要等多少個月才能知足
訂單。
題解:php
就是裸的二分答案。ios
1 #include<cstring> 2 #include<cmath> 3 #include<algorithm> 4 #include<iostream> 5 #include<cstdio> 6 7 #define N 200007 8 #define ll long long 9 using namespace std; 10 inline int read() 11 { 12 int x=0,f=1;char ch=getchar(); 13 while(ch>'9'||ch<'0'){if (ch=='-') f=-1;ch=getchar();} 14 while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();} 15 return x*f; 16 } 17 18 int n; 19 ll a[N],h[N],S,L,mx; 20 21 bool check(ll day) 22 { 23 ll ans=0; 24 ll now; 25 for(int i=1;i<=n;i++) 26 { 27 now = a[i]*day+h[i]; 28 if(now>=L) ans+=now; 29 if(ans>=S) return true; 30 } 31 return false; 32 } 33 int main() 34 { 35 cin>>n>>S>>L; 36 for(int i=1;i<=n;i++) cin>>h[i]; 37 for(int i=1;i<=n;i++) cin>>a[i],mx=max(mx,max(L,S)/a[i]); 38 ll l=0,r=mx,ans=0; 39 while(l<=r) 40 { 41 ll mid=(l+r)>>1; 42 if(check(mid)) r=mid-1; 43 else l=mid+1; 44 } 45 printf("%lld",l); 46 }