每日一题 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

相关推荐

点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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