当前位置:   article > 正文

1247:河中跳房子_1247:河中跳房子

1247:河中跳房子

 

 

【题目描述】

每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一个岩石跳到另一个岩石。这项激动人心的活动在一条长长的笔直河道中进行,在起点和离起点L远 (1 ≤ L≤ 1,000,000,000) 的终点处均有一个岩石。在起点和终点之间,有N (0 ≤ N ≤ 50,000) 个岩石,每个岩石与起点的距离分别为Di (0 < Di < L)。

在比赛过程中,奶牛轮流从起点出发,尝试到达终点,每一步只能从一个岩石跳到另一个岩石。当然,实力不济的奶牛是没有办法完成目标的。

农夫约翰为他的奶牛们感到自豪并且年年都观看了这项比赛。但随着时间的推移,看着其他农夫的胆小奶牛们在相距很近的岩石之间缓慢前行,他感到非常厌烦。他计划移走一些岩石,使得从起点到终点的过程中,最短的跳跃距离最长。他可以移走除起点和终点外的至多M (0 ≤ M ≤ N) 个岩石。

请帮助约翰确定移走这些岩石后,最长可能的最短跳跃距离是多少?

【输入】

第一行包含三个整数L, N, M,相邻两个整数之间用单个空格隔开。

接下来N行,每行一个整数,表示每个岩石与起点的距离。岩石按与起点距离从近到远给出,且不会有两个岩石出现在同一个位置。

【输出】

一个整数,最长可能的最短跳跃距离。

【输入样例】

25 5 2
2
11
14
17
21

【输出样例】

4

【提示】

在移除位于2和14的两个岩石之后,最短跳跃距离为4(从17到21或从21到25)。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <cstring>
  6. #include <string>
  7. #include <cmath>
  8. #include <map>
  9. #include <set>
  10. #include <queue>
  11. #define sf(a) scanf("%d\n",&a)
  12. #define E 1e-8
  13. #define pi acos(-1.0)
  14. #define ms(a) memset(a,0,sizeof a)
  15. #define rep(a,b,c) for(int a=b;a<=c;a++)
  16. #define pf(a) printf("%.3lf\n",a)
  17. using namespace std;
  18. typedef long long ll;
  19. typedef unsigned long long ull;
  20. const int inf=0x3f3f3f3f;
  21. const int idata=1e6+5;
  22. int i,j,k;
  23. //int judge,flag;
  24. ll step[idata];
  25. //ll dp[idata][10];
  26. ll temp;
  27. ll n,m,t;
  28. ll maxx=0,minn=inf;
  29. ll cnt,len,sum,ans;
  30. ll high,wigh;
  31. //map<ll,int>pre[2];
  32. set<ll>s;
  33. //priority_queue<ll, vector<ll>,less<ll> >q;
  34. queue<ll>q;
  35. bool check(int aim)
  36. {
  37. int temp=0;//目前位置
  38. int ans=0;
  39. rep(i,1,n)
  40. {
  41. if(step[i]-temp<aim)//将石头删掉
  42. ans++;
  43. else
  44. temp=step[i];
  45. }
  46. if(m-temp<aim) ans++;
  47. return ans<=k;
  48. }
  49. int main()
  50. {
  51. while(cin>>m>>n>>k)
  52. {
  53. rep(i,1,n)
  54. {
  55. cin>>step[i];
  56. }
  57. int l=0,r=m;
  58. while(r-l>1)
  59. {
  60. int mid=(l+r)/2;
  61. if(check(mid))
  62. l=mid;
  63. else
  64. r=mid;
  65. }
  66. cout<<l<<endl;
  67. }
  68. return 0;
  69. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/209025
推荐阅读
相关标签
  

闽ICP备14008679号