POJ - 3258/USACO - Dec06 Silver/NOIP 2015 - 提高组 River Hopscotch 贪心+二分搜索
2016-07-31 09:36
661 查看
【问题描述】
每年奶牛们举行一场奇特的活动。他们从左岸出发,一个个小心地跳过河上的石头,最后跳到右岸。左右岸上各有一块石头,分别是起点和终点,而它们之间有N块石头在河上,它们与两岸的两块石头处在同一条直线上。左右岸相距L个单位长度,而每块石头到左岸都有一个距离Di(0 < Di < L)。
Farmer John很自豪地看着他的奶牛们一个个跳过河,但是渐渐地他厌倦了。他希望移走河上的一些石头,使得剩下的石头(包括岸上的)中,最近的两个石头间的距离增加。然而因为精力有限,他不能移走太多石头,最多移走M(0 <= M <= N )块。他想知道石头间的距离最长是多少。
【输入格式】
第1行:三个整数L,N和M。
第2..N+1行:每行一个整数,表示石头到左岸的距离。输入保证没有两块石头会在同一处。
【输出格式】
仅一个整数,表示移走若干块石头后的最长的最短距离。
【输入样例】
【输出样例】
【数据范围】
1<=N<=50000
1<=L<=1000000000
【样例解释】
移走距离左岸2和14的石头,还剩下0,11,17,21,25,他们之间的最小距离为4.
思路:要求最短距离最长,可用二分搜索法假设最短的距离为x,即所有石头的距离都必须大于等于x,在check时用贪心+区间选点验证假设是否成立。若成立,则需要移走的石头数量应小于等于M,则可以将x向上猜。
每年奶牛们举行一场奇特的活动。他们从左岸出发,一个个小心地跳过河上的石头,最后跳到右岸。左右岸上各有一块石头,分别是起点和终点,而它们之间有N块石头在河上,它们与两岸的两块石头处在同一条直线上。左右岸相距L个单位长度,而每块石头到左岸都有一个距离Di(0 < Di < L)。
Farmer John很自豪地看着他的奶牛们一个个跳过河,但是渐渐地他厌倦了。他希望移走河上的一些石头,使得剩下的石头(包括岸上的)中,最近的两个石头间的距离增加。然而因为精力有限,他不能移走太多石头,最多移走M(0 <= M <= N )块。他想知道石头间的距离最长是多少。
【输入格式】
第1行:三个整数L,N和M。
第2..N+1行:每行一个整数,表示石头到左岸的距离。输入保证没有两块石头会在同一处。
【输出格式】
仅一个整数,表示移走若干块石头后的最长的最短距离。
【输入样例】
25 5 2 2 14 11 21 17
【输出样例】
4
【数据范围】
1<=N<=50000
1<=L<=1000000000
【样例解释】
移走距离左岸2和14的石头,还剩下0,11,17,21,25,他们之间的最小距离为4.
思路:要求最短距离最长,可用二分搜索法假设最短的距离为x,即所有石头的距离都必须大于等于x,在check时用贪心+区间选点验证假设是否成立。若成立,则需要移走的石头数量应小于等于M,则可以将x向上猜。
/* Name: River_Hopscotch Copyright: Twitter & Instagram @stevebieberjr Author: @stevebieberjr Date: 31-07-16 10:49 */ #include<cstdio> #include<algorithm> using namespace std; int l,n,m; int a[50005]; int L; bool check(int x) { int last=0; int ans=0; for(int i=1;i<=n;i++) { if(a[i]-last<x) ans++; else last=a[i]; } if(ans>m) return 0; return 1; } int main() { scanf("%d%d%d",&L,&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+1+n); a[n+1]=L; n++; int l=0,r=L; while(l<=r) { int mid=(l+r)/2; if(check(mid)) l=mid+1; else r=mid-1; } printf("%d\n",l-1); return 0; }
相关文章推荐
- POJ_3258_River_Hopscotch_[NOIP2015]_(二分,最大化最小值)
- poj 3258 River Hopscotch 二分搜索
- POJ 3258 River Hopscotch [NOIP2015 D2T1] (洛谷 P2678 跳石头)
- poj 3258 River Hopscotch 二分搜索极值
- POJ 3258 River Hopscotch 二分搜索
- poj 3258 River Hopscotch 二分搜索
- POJ-3258 River Hopscotch 二分查找+贪心
- [POJ](3258)River Hopscotch ---二分查找+贪心(查找+贪心)
- POJ 3258 River Hopscotch【二分搜索】
- POJ_3258_River Hopscotch_二分搜索
- POJ 3258 River Hopscotch 二分答案
- POJ 3258:River Hopscotch 二分的好想法
- poj 3258 River Hopscotch 【二分】
- River Hopscotch - POJ 3258 二分
- 【BZOJ】1650: [Usaco2006 Dec]River Hopscotch 跳石子(二分+贪心)
- POJ 3258 River Hopscotch 解题报告(二分)
- 【贪心专题】POJ 3258 River Hopscotch (最大化最小值 贪心+二分搜索)
- poj 3258 River Hopscotch 二分查找
- POJ 3258 River Hopscotch 二分查找
- POJ 3258 River Hopscotch 二分枚举