POJ 3258 (固定划分的最大距离)
2017-04-13 14:32
120 查看
题意:
有一条河,两边各看作有一块石头,河中有n块石头,总计n+2块石头,现在要去除
m块石头,怎么去除才能使得剩下的石头最近的距离最大。
思路:
二分最小的距离,那么在判断条件的时候如果距离大于mid 时候就当作一个组。
难点在于,当num == m的时候还要继续去寻找。(现在还是很难理解,感觉
应该是适合于这道题。)
有一条河,两边各看作有一块石头,河中有n块石头,总计n+2块石头,现在要去除
m块石头,怎么去除才能使得剩下的石头最近的距离最大。
思路:
二分最小的距离,那么在判断条件的时候如果距离大于mid 时候就当作一个组。
难点在于,当num == m的时候还要继续去寻找。(现在还是很难理解,感觉
应该是适合于这道题。)
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXN = 50005; __int64 L; int n,m; int a[MAXN]; int main() { //freopen("in.txt","r",stdin); scanf("%I64d%d%d",&L,&n,&m); int l = 0,r = L; a[0] = 0; a[n+1] = L; for(int i = 1;i <= n + 1; i++) { if(i <= n) scanf("%d",&a[i]); if(l > a[i] - a[i-1]) l = a[i] - a[i-1]; } sort(a,a+2+n); while(l <= r) { int mid = (l+r)>>1; __int64 sum = 0; int num = 0; for(int i = 1;i <= n+1; i++) { if((sum += a[i]-a[i-1]) <= mid) { num++; } else { sum = 0; } } if(num <= m) //难点 l = mid + 1; else r = mid - 1; } printf("%d\n",l); return 0; }
相关文章推荐
- POJ 3258 River Hopscotch(二分·最小距离最大)
- POJ 3258 River Hopscotch(二分·最小距离最大)
- poj 3258 二分法求最小值最大
- poj 2631 (求树上的最大距离 基础题)
- poj——2456Aggressive cows(二分搜索 求牛牛之间最大距离)
- Poj2187 凸包求最大距离
- POJ 2253 Frogger(最小最大距离)
- poj 2187 凸包+平面上点之间最大距离
- POJ 2631 Roads in the North(村庄最大距离,树的直径,经典题目)
- POJ-1985 Cow Marathon (最大距离)
- poj 2823 线段树 求固定区间的最大最小值
- poj 2926 Requirements(最大哈密顿距离,二进制)
- POJ 2112--Optimal Milking【二分找最大距离的最小值 && 最大流dinic】
- poj 3258 二分最小值最大
- POJ 3258 小牛过河 二分搜索最大的最小值
- poj 2187 Beauty Contest(凸包求解多节点的之间的最大距离)
- POJ 3258- River Hopscotch(二分求最小值最大)
- POJ 3258 River Hopscotch(二分求最小中的最大)
- POJ 3258-River Hopscotch(二分法-最大化最短距离)
- POJ 2689 Prime Distance(区间相邻素数最大、小距离,区间素数筛)