每日一题 — 2020 - 04 - 18

感觉自己又菜了,首先二分答案没看出来,然后二分的时候,漏掉左边界是0,太菜了。


题目链接

解题思路:

  • 直接二分答案,l = 0 , r = 1e9
  • 然后判断条件时,我们要左取右不取(根据实际情况来,我这块理解的也不是很好)
  • 然后直接输出l就OK
  • 主要还是多做些二分的题

代码:

#include <iostream>
#include <cstdio>

using namespace std;
 
int n, k;
 
const int N = 200010;
 
int a[N];
 
bool check(int x){
    long long res = 0;
    for (int i = 0; i < n; i ++){
        res += a[i] / x;
    }
    if (res >= k) return true;
    return false;
}
 
int main(){
     
    scanf("%d%d",&n,&k);
 
    for (int i = 0; i < n; i++){
        scanf("%d",&a[i]);
    }
 
    int l = 0, r = 1e9;
 
    while(l < r){
        int mid = (l + r  + 1) >> 1;
        if (check(mid)) l = mid;
        else r = mid - 1;
    }
 
    printf("%d\n",l);
    return 0;
}
发布了121 篇原创文章 · 获赞 7 · 访问量 4319

猜你喜欢

转载自blog.csdn.net/LiangNiuMu/article/details/105599108