牛客网【每日一题】4月17日题目精讲 华华给月月准备礼物


试题链接

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

二月中旬虐狗节前夕,华华决定给月月准备一份礼物。为了搭建礼物的底座,华华需要若干根同样长的木棍。华华手头上有一些长度参差不齐的木棍,他想将每根都裁剪成若干段自己想要的长度,并丢掉多余的部分。因为华华的手很巧,所以他的裁剪过程不会有任何的失误。也就是说,对于一根长度为N的木棍,华华可以精准的将它们裁剪为若干段木棍,使它们的长度之和为N。
华华不知道裁剪成多长比较好,所以干脆越长越好。不过由于华华有点强迫症,所以他希望长度为非负整数。保证所有木棍的原长也是非负整数。那么请问华华最终得到的每根木棍多长呢?
输入描述:

第一行两个正整数N、K,表示木棍原本的根数和华华希望得到的木棍根数。 第二行N个正整数Li表示每根木棍的初始长度。

输出描述:

输出一行一个非负整数表示每根木棍的最大长度。

示例1
输入

5 10
4 4 4 5 3

输出

1

说明

如果长度为2,只能得到2+2+2+2+1=9根,不够;长度为1可以得到4+4+4+5+3=20根,足够。所以答案最大是1。

示例2
输入

5 3
1 2 3 4 5

输出

3

备注:

题解:

二分的模板题吧
我们假设最后结果是ans,那么小于等于ans的答案都是符合条件的(只是不是最大),而大于ans的肯定不行,那ans怎么确定呢?
这里就用到二分,一开始左界left=1,右界right=最长的木棍长度(也可以初始值为1e9+1,因为木棍再长也不可能大于1e9),然后去这段区间的中间值mid,然后判断mid是否符合条件,如果符合条件,说明mid左边的都可以,右边的不一定,右边有可能还有更优的答案,也可以没有,所以left=mid+1,开始探索mid右边的未知区域。但如果不符合条件,说明当前mid右边更不符合,只有左边才存在符合条件,right=mid-1,探索左边区域,一直这样二分找到最佳答案

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+4;
ll l[maxn];
int n,k;

ll sum;
ll check(ll len)
{
   
	sum=0;
	for(int i=1;i<=n;i++)sum+=l[i]/len;
	return sum;
}
int main()
{
   
	
	cin>>n>>k;
	for(int i=1;i<=n;i++)cin>>l[i];
	ll ans=0;
	ll left=1,right=1e9+1,mid;
	while(left<=right)
	{
   
		mid=(left+right)>>1;
		if(check(mid)>=k)
		{
   
			left=mid+1;
			ans=mid;
		}
		else 
		{
   
			right=mid-1;
		}
	}
	cout<<ans;
	return 0;
} 

推荐例题:

NC16462 跳石头
noip day2 T1题目,也是经典的二分题目,刚学二分的可以练练手

全部评论
为什么left不能直接等于mid也有可能mid就是最优解
点赞 回复 分享
发布于 2021-05-31 20:52

相关推荐

03-19 18:27
已编辑
门头沟学院 C++
26学院本太难了,很多公司机筛就给我刷了。机会都难拿到如果是简历存在问题也欢迎拷打————————————————————分割线——————————————————————2026.3.4更新:发完贴之后,时不时投递又收到了不少的笔试/面试邀请。主要是之前投递简历出去之后基本上都是沉默状态,年后好转了不少timeline:2026.01.21&nbsp;文远知行笔试,半年多没刷算法题&nbsp;-&gt;挂&nbsp;(后续HR说春招可以重新安排笔试)2026.2.4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;小鹏汇天&nbsp;技术一面,第二周收到结果&nbsp;-&gt;挂2026.2.12&nbsp;&nbsp;&nbsp;大众Cariad代招&nbsp;技术二面&nbsp;-&gt;Offer2026.2.28&nbsp;&nbsp;&nbsp;多益网络技术面试,由于风评太差,一直在犹豫要不要接面试&nbsp;-&gt;推迟-----------分割线-----------2026.3&nbsp;月前的某一天,临时去电网报名了二批计算机岗位的笔试2026.3.6&nbsp;从上家公司实习离职,氛围最好的一家公司,leader&nbsp;说可以帮忙转正,但是流程太长,而且我们部门据说只有一个&nbsp;hc,更想要研究生,我很有可能是会被签外包公司在这里干活,就离职了。2026.3.9&nbsp;入职新公司,大众Cariad&nbsp;以外部公司的身份进组,项目组签了三年,后续三年应该都可以在这里呆,不知道有没有希望原地跳槽。2026.3.10&nbsp;电网考试居然说我通过资格审查了,短信约我去参加资格审查,请假一天,买了&nbsp;12&nbsp;号晚上的机票回成都2026.3.15&nbsp;参加国家电网三新计算机类的笔试2026.3.17&nbsp;电网出成绩了,感觉很低。觉得已经🈚️了2026.3.18&nbsp;收到电网面试通知,通知&nbsp;3.22-3.25&nbsp;这个时间去面试,我的岗位只招&nbsp;1&nbsp;个人。据说面试只有&nbsp;2-3&nbsp;人,不知道能不能成功
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务