POJ 3258 River Hopscotch
2015-07-20 15:28
477 查看
题意:一条河宽L,中间有n个石头,最多可以去掉m个,求最大的最小跳跃距离。
思路:二分最小值;
二分的两种类型:1求最小的最大值。2求最大的最小值。这个属于第二种。
思路:二分最小值;
二分的两种类型:1求最小的最大值。2求最大的最小值。这个属于第二种。
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; int L,n,m,a[50010]; bool check(int mid)//检查当前最小值的时候需要去掉的石头数目是否小于m { int cnt = 0; int last = 0; for(int i = 1; i < n + 2; i++) if(mid > (a[i] - a[last])) cnt++; else last = i; if(cnt > m) return false; else return true; } int main() { scanf("%d%d%d",&L,&n,&m); a[0] = 0; a[n+1] = L; for(int i = 1; i <= n; i++) scanf("%d",&a[i]); sort(a,a+n+2); int l = 0, r = L,mid; while(l < r)//二分最小值 { mid = (l + r) / 2; mid += (l + r) & 1;//这个地方是特殊的,求最大的最小需要这样,不然会死循环。 // printf("%d %d %d\n",l,r,mid); if(check(mid)) l = mid;//不一定是最大的,先留着。 else r = mid - 1; //system("pause"); } //printf("%d %d %d\n",l,r,mid); printf("%d\n",l); return 0; }
相关文章推荐
- 快速排序里的学问:从猜数字开始
- HDU 4898 The Revenge of the Princess’ Knight ( 2014 Multi-University Training Contest 4 )
- Search Insert Position,Search for a Range,Pow(x, n),Sqrt(x)
- Find Minimum in Rotated Sorted Array II
- [LeetCode] Sqrt(x)
- [LeetCode] Pow(x, n)
- [LeetCode] Search Insert Position
- [LeetCode] Search for a Range
- [LeetCode] Search in Rotated Sorted Array
- PAT 1057 Stack (30)
- int sqrt(int x)
- Pow(x, n)
- Find Minimum in Rotated Sorted Array
- Divide Two Integers
- Leetcode:Search a 2D Matrix 菜鸟解法
- [BZOJ1257][CQOI2007]余数之和
- POJ2391解题报告
- poj_2002
- Codeforces Round #275 (Div. 2) B. Friends and Presents
- zoj 2855 Google Map