ACM: 一题二分搜索题. poj3258 & 4000 nbsp;…
2016-05-19 23:16
323 查看
River Hopscotch
Description
Every year the cows hold an event featuring a peculiar version
of hopscotch that involves carefully jumping from rock to rock in a
river. The excitement takes place on a long, straight river with a
rock at the start and another rock at the end, L units
away from the start (1 ≤ L ≤ 1,000,000,000). Along the
river between the starting and ending rocks, N (0 ≤
N ≤ 50,000) more rocks appear, each at an integral
distance Di from the start (0 <
Di < L).
To play the game, each cow in turn starts at the starting rock
and tries to reach the finish at the ending rock, jumping only from
rock to rock. Of course, less agile cows never make it to the final
rock, ending up instead in the river.
Farmer John is proud of his cows and watches this event each
year. But as time goes by, he tires of watching the timid cows of
the other farmers limp across the short distances between rocks
placed too closely together. He plans to remove several rocks in
order to increase the shortest distance a cow will have to jump to
reach the end. He knows he cannot remove the starting and ending
rocks, but he calculates that he has enough resources to remove up
to M rocks (0 ≤ M ≤ N).
FJ wants to know exactly how much he can increase the shortest
distance *before* he starts removing the rocks. Help
Farmer John determine the greatest possible shortest distance a cow
has to jump after removing the optimal set of M rocks.
Input
Line 1: Three space-separated integers: L, N,
and M
Lines 2..N+1: Each line contains a single integer
indicating how far some rock is away from the starting rock. No two
rocks share the same position.
Output
Line 1: A single integer that is the maximum of the shortest
distance a cow has to jump after removing M rocks
Sample Input
25 5 2
2
14
11
21
17
Sample Output
4
题意与思路: 与3273类似.
代码:
#include <iostream>
#include <cstdio>
#include <stdlib.h>
using namespace std;
#define MAX 50005
int a[MAX];
int L , N , M;
int cmp(const void *a , const void *b)
{
return
*(int*)a - *(int*)b;
}
int find(int mid)
{
int k =
0;
int i , j =
0;
for(i = 1; i
<= N+1; ++i)
{
if(a[i] - a[j] <= mid)
{
k++;
}
else
{
j = i;
}
}
if(k
> M)
return 0;
else
return 1;
}
int result(int &left,int
&right)
{
int
mid;
while(left
<= right)
{
mid = (left+right) / 2;
if( find(mid) == 1 )
left = mid + 1;
else
right = mid - 1;
}
return
left;
}
int main()
{
while(cin
>> L >>
N >> M)
{
a[0] = 0 , a[N+1] = L;
int i;
int left = 0 , right = L;
for(i = 1; i <= N; ++i)
{
cin >> a[i];
}
qsort(a,N+2,sizeof(int),cmp);
cout <<
result(left,right) << endl;
}
return
0;
}
相关文章推荐
- 【LintCode】查找斐波那契数列中的N个数
- ACM: 又是一题二分法题 poj 3122…
- ACM: poj 第50题 一题递推数论题 …
- ACM: 图论基础题 poj2387 裸露的di…
- ACM: 图论题poj 1860 (没心情复习…
- ACM: 图论题 poj3259 bellman_ford…
- ACM: 一道简单数论题 (重要的是建…
- ACM : 一道基础数学题目POJ 1423 …
- ACM : 数论题 poj1061 (扩展欧几…
- ACM: 一道水题 poj1723
- ACM: 一道数论题 poj1730 (做了好…
- ACM: 一题大数求mod poj2635 (…
- Android matrix camera处理图片绕X轴Y轴翻转(类似3D效果)
- 【转】简单几步让App Store软件下载快如迅雷 -- 不错!!!
- ACM: 一道有待优化的题 poj3292
- ACM: 大数运算(正整数)
- ACM: 一道累加同余求模 poj1845 (…
- ACM: 一道组合数学的题 poj3252
- ACM: 深搜题
- 总结: 全排列 和 全部子集 (深搜…