站外题求调
  • 板块学术版
  • 楼主uncle_steve
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/10/9 18:23
  • 上次更新2024/10/9 20:41:03
查看原帖
站外题求调
1268907
uncle_steve楼主2024/10/9 18:23

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帮忙改改吗?

2024/10/9 18:23
加载中...