POJ 3258 River Hopscotch 二分
2012-04-06 16:38
351 查看
题意:奶牛们喜欢在河里的石头上玩跳房子游戏,每次从一个石头跳到另一个石头上。现在知道起点的石头,终点的石头,以及终点石头到起点石头的距离L。又知道起点-终点之间还有N个石头,每个石头到起点的距离记为rock[i]。Farmer John想去掉N个石头中的M个,问如何去掉使得任意两块石头之间的距离的最小值最大。
#include<cstdio> #include<algorithm> using namespace std; int L, N, M; int rock[200000]; bool check ( int len ) { int i, j, cnt = 0; for ( i = 1; i <= N + 1; i++ ) { j = i - 1; while ( i <= N + 1 && rock[i] - rock[j] < len ) { i++; cnt++; } if ( cnt > M ) return false; } return true; } int bfind ( int left, int right ) { while ( left + 1 < right ) //放防止出现left = mid的死循环 { int mid = (left+right)/2; if ( check(mid) ) left = mid; //始终保持一边的合法性。 else right = mid - 1; } if ( check(right) ) return right; //选择最优值,因为right>=left,若right合法,则它更优 else return left; } int main() { scanf("%d%d%d",&L,&N,&M); for ( int i = 1; i <= N; i++ ) scanf("%d",&rock[i]); rock[0] = 0; rock[N+1] = L; sort(rock,rock+N+2); int ret = bfind ( 0, L ); printf("%d\n",ret); return 0; }
相关文章推荐
- poj 3258 River Hopscotch 二分搜索
- POJ 3258:River Hopscotch 二分的好想法
- River Hopscotch POJ - 3258 (二分求最小值)
- POJ 3258 River Hopscotch 二分查找
- POJ_3258_River_Hopscotch_[NOIP2015]_(二分,最大化最小值)
- POJ-3258 River Hopscotch 解题报告(二分) 牛跳石头
- POJ 3258:River Hopscotch 二分的好想法
- River Hopscotch POJ - 3258 (二分求最小值)
- POJ 3258:River Hopscotch & POJ 3273:Monthly Expense (二分)
- poj 3258 River Hopscotch 【二分】
- POJ 3258 River Hopscotch【二分:最大化最小值】
- Poj3258 River Hopscotch 二分
- POJ-3258 River Hopscotch 二分查找+贪心
- POJ-3258 River Hopscotch 二分枚举求上限
- POJ 3258 River Hopscotch【二分搜索】
- 【POJ】3258 River Hopscotch 不仅仅是二分
- River Hopscotch - POJ 3258 二分
- poj 3258 River Hopscotch 【二分】
- poj 3258:River Hopscotch(二分)
- POJ 3258 River Hopscotch 二分答案