L 木材
问题描述
有n棵树,初始时每棵树的高度为Hi ,第i棵树每月都会长高Ai。现在有个木料长度总量为S的订单,客户要求每块木料的长度不能小于L,而且木料必须是整棵树(即不能为树的一部分)。现在问你最少需要等多少个月才能满足订单。
输入格式
第一行3个用空格隔开的非负整数 ,表示树的数量、订单总量和单块木料长度限制。
第二行N个用空格隔开的非负整数,依次为h1,h2,h3……。
第三行N个用空格隔开的非负整数,依次为a1,a2,a3……。
输出格式
输出一行一个整数表示答案。
样例输入
3 74 51
2 5 2
2 7 9
样例输出
7
我的代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a[200005],h[200005];
ll n,s,L;
bool f(in M){
ll tot=0;
for(int i=1;i<=n;i++){
ll tmp=h[i]+M*a[i];
if(tmp>=L) tot+=tmp;
if(tot>=s) return true;
}
return false;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>s>>L;
ll minn=INT_MAX;
for(int i=1;i<=n;i++){
cin>>h[i];
}
for(int i=1;i<=n;i++){
cin>>a[i];
minn=min(minn,a[i]);
}
ll l=0,r=(L-1)/minn+1;
while(l<r){
ll mid=(l+r-1) /2+1;
if(f(mid)) l=mid;
else r=mid-1;
}
cout<<l;
return 0;
}
觉得问题集中在29-34行,有dalao帮忙改改吗?