zoukankan      html  css  js  c++  java
  • P2440 木材加工题解

    题目传送门
    无脑的二分答案模板,锻炼写一下check函数吧。
    同时有一点需要注意,就是(l)的初始值不能是0!,否则第四个测试点RE掉!

    #include <bits/stdc++.h>
    
    typedef long long LL;
    using namespace std;
    const int N = 1000010;
    int a[N];
    int n;
    LL k;
    
    bool check(LL mid) {
      LL res = 0;
      for (int i = 1; i <= n; i++) res += a[i] / mid;
      return res >= k;
    }
    
    int main() {
      cin >> n >> k;
      for (int i = 1; i <= n; i++) cin >> a[i];
      sort(a + 1, a + n + 1);
      // mid的定义:能够切割得到的小段的***最大长度***
      LL l = 1, r = a[n], ans = 0;
      //注意l要从1开始,从0开始会有4点RE
      //二分答案模板
      while (l <= r) {
        int mid = (l + r) >> 1;
        if (check(mid))
          l = (ans = mid) + 1;  //在右区间查找,同时更新答案
        else
          r = mid - 1;  //在左区间查找
      }
      //输出
      cout << ans << endl;
      return 0;
    }
    
  • 相关阅读:
    Hadoop学习资料收集
    sed使用详解
    shell编程001
    电影《无法触碰》
    正则表达式
    I/O重定向与管道
    bash基础知识
    用户权限模型
    Linux文件管理常用命令
    根文件系统详解
  • 原文地址:https://www.cnblogs.com/littlehb/p/15057225.html
Copyright © 2011-2022 走看看