华华给月月准备礼物

对于k的值是具有单调性,考虑二分。(单调性一般就先考虑二分),再看一下数据能过。

#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
#define maxn 110000
ll n,k,max1=0;
ll L[maxn];
bool check(ll mid)//判断mid是否合法,即所分成的木棍数是否满足k
{
    ll ans=0;
    for(int i=1;i<=n;++i)
    {
        if(L[i]<mid) continue;
        ans+=L[i]/mid;
    }
    if(ans<k) return 0;
    else return 1;
}
int main()
{
    cin>>n>>k;
    for(ll i=1;i<=n;++i) cin>>L[i],max1=max(max1,L[i]);
    ll l=1,r=max1,h=0;
    while(l<r)
    {
        ll mid=(l+r)/2+1;//扩大二分的范围,避免出错
        if(check(mid)) h=mid,l=mid+1;
        else r=mid-1;
    }
    if(check(h+1)) cout<<h+1;//在精确一下,我二分一般莫名其妙卡在r,l边界值,这个保险点
    else cout<<h;
    return 0;
}
全部评论

相关推荐

牛客刘北:如果暑期实习是27届的话,你要晚一年才会毕业,企业为什么会等你呢?要搞清时间逻辑呀!27届现在实习只能是在暑假实习,这是日常实习,不是暑期实习。所以多去投日常实习吧,暑期实习肯定不会要你的
点赞 评论 收藏
分享
仁者伍敌:牛子这些人还会点一个自动回复,boss都不带回复的
点赞 评论 收藏
分享
07-11 11:15
中南大学 Java
好可爱的hr姐姐哈哈哈哈
黑皮白袜臭脚体育生:兄弟们貂蝉在一起,吕布开了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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