zoukankan      html  css  js  c++  java
  • sdut 3916

    这道题就是二分枚举加贪心,小蓝书上一开始就讲的,但是我给忘了,很难受

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    const int maxn = 1e5+5;
    long long n,m;
    long long a[maxn];
    bool judge(long long ans);
    int main()
    {
        long long mid;
        while(scanf("%lld%lld",&n,&m) != EOF)
        {
            long long l,r;
            long long ans;
            for(long long i = 0; i < n; ++i)
                scanf("%lld",a+i);
            sort(a,a+n);
            l = 0,r=a[n-1]+1;
         //枚举长度为mid的区间 相当于每个点管理一定长度的区间
         //遇见管理不到的点 就再加一个点去管理mid的区间
         //相当于暴力了 也挺简单的
    while(l <= r) { mid = (l+r)/2; if(judge(mid)) { ans = mid; r = mid-1; } else { l = mid+1; } } printf("%lld ",ans); } } bool judge(long long ans) { long long num=1; long long ma = a[0]+ans; for(long long i=0;i<n;++i) { if(ma < a[i]) { ma = a[i]+ans; num++; } } return num <= m; }
  • 相关阅读:
    jquery常用语句
    记录一个奇异的问题
    冰块渲染2
    冰块渲染
    GCAlloc 问题一则
    矩阵基础3
    优化 Overdraw 和 GrabPass
    优化平面法线贴图
    环境模拟
    使用 GPU 加速计算
  • 原文地址:https://www.cnblogs.com/mltang/p/8977993.html
Copyright © 2011-2022 走看看