码迷,mamicode.com
首页 > 其他好文 > 详细

sdut 3916

时间:2018-05-02 02:32:37      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:就是   else   简单的   main   col   const   cstring   for   ace   

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

#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\n",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; }

 

sdut 3916

标签:就是   else   简单的   main   col   const   cstring   for   ace   

原文地址:https://www.cnblogs.com/mltang/p/8977993.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!