sdut 3916
Posted mltang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\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的主要内容,如果未能解决你的问题,请参考以下文章