每日一题 4.17 华华给月月准备礼物

华华给月月准备礼物

https://ac.nowcoder.com/acm/problem/23049

经典二分 (之前想错了 不过这两个地方应该可以加速)

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll const maxn=2e5+5;
ll n,k,a[maxn],ans,maxl,l,r,mid;
bool check(ll m)
{
    ll ins=0;
    for(int i=1;i<=n;++i) ins+=(a[i]/m);
    return ins>=k;
}
int main()
{
  scanf("%lld%lld",&n,&k);
  for(int i=1;i<=n;++i)
  {
      scanf("%lld",&a[i]);
      maxl=max(maxl,a[i]);
  }
  l=1;r=maxl;
  if(!check(1)){cout<<0<<endl;return 0;}///切1都不满足
  if(check(maxl)){cout<<maxl<<endl;return 0;}///不切也满足
  while(l<=r)
  {
      mid=(l+r)>>1;
      if(check(mid)){ans=mid;l=mid+1;}
      else r=mid-1;
  }
  cout<<ans<<endl;
    return 0;
}
每日一题题解 文章被收录于专栏

每日一题题解的汇集

全部评论
切1都不满足的话二分当中check一直不为真,ans会输出它的初始值0,所以是对的(如果题目要求没方案输出负一之类的话,也只需要最后判断ans行了) 不切也满足的话二分当中check一直为真,最后左界l会变成maxl+1,最后ans还是maxl,所以也是对的。 也就是说,二分当中的左右界都是能取到的,不需要特殊判断。
点赞 回复 分享
发布于 2020-04-21 15:18

相关推荐

10-30 19:23
已编辑
山东大学(威海) C++
牛至超人:我了个雷 1.实习经历写太长了吧,精简一点,你写那么老多,面试官看着都烦 2.项目经历你放俩竞赛干啥单独拿出来写上几等奖就行了呗 3.一大雷点就是项目经历里的那个课程设计,大家都知道课程设计巨水,不要写课程设计,换一个名字,就叫学生管理系统,面试官问就说是自己做的项目,不要提课程设计的事 4.那个交流经历,简化一下塞到最上面的教育经历里就行了 5.简历尽量一页纸
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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