C++——NOIP2015提高组day2 t1——跳石头
2017-08-14 14:41
302 查看
题目描述
一年一度的“跳石头”比赛又要开始了!这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有 N 块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。
为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长。由于预算限制,组委会至多从起点和终点之间移走 M 块岩石(不能移走起点和终点的岩石)。
输入格式
输入文件第一行包含三个整数 L,N,M ,分别表示起点到终点的距离,起点和终点之间的岩石数,以及组委会至多移走的岩石数。接下来 N 行,每行一个整数,第 i 行的整数 Di(0<Di<L)表示第 i 块岩石与起点的距离。这些岩石按与起点距离从小到大的顺序给出,且不会有两个岩石出现在同一个位置。
输出格式
输出只包含一个整数,即最短跳跃距离的最大值。
样例数据
输入25 5 2
2
11
14
17
21
输出
4
备注
【样例1说明】将与起点距离为 2 和 14 的两个岩石移走后,最短的跳跃距离为 4(从与起点距离17的岩石跳到距离21的岩石,或者从距离21的岩石跳到终点)。
【数据范围】
对于 20% 的数据,0≤M≤N≤10。
对于 50% 的数据,0≤M≤N≤100。
对于 100% 的数据,0≤M≤N≤50,000,1≤L≤1,000,000,000。
#include<stdio.h> __int32 l,n,m; __int32 dis[50002]; __int32 readint() { __int32 i=0; __int8 ch; for(ch=getchar();ch<'0'||ch>'9';ch=getchar()); for(;ch>='0' && ch<='9';ch=getchar()) i=(i<<3)+(i<<1)+ch-'0'; return i; } bool ck(__int32 x) { __int32 last=0,tot=0; for(__int32 i=1;i<=n;++i) dis[i]<x+last ? ++tot : last=dis[i]; if(l<last+x) ++tot; return tot>m ? false : true; } int main() { l=readint(); n=readint(); m=readint(); for(__int32 i=1;i<=n;++i) dis[i]=readint(); __int32 head=1,tail=l+1,mid; while(tail>1+head) { mid=head+tail>>1; if(ck(mid)) head=mid; else tail=mid; } __int32 num=0; __int8 c[15]; while(head) c[++num]=(head%10)+48,head/=10; while(num) putchar(c[num--]); return 0; }
相关文章推荐
- NOIP2015复赛提高组day2(A:跳石头 B:子串 C:运输计划)
- NOIP 2015 提高组 复赛 day2 stone 跳石头
- NOIP 2015 提高组 Day2 跳石头
- NOIP2015提高组day2 —— 跳石头(stone)
- {题解}[jzoj4326]NOIP2015提高组Day2 跳石头
- C++——NOIP2015提高组day2 t2——子串
- NOIP 2015复赛提高组Day2 T1==Codevs 4768 跳石头
- 跳石头 NOIP2015 提高组 Day2 T1
- C++——NOIP2015提高组day2 t3——运输计划
- 洛谷Luogu-267 跳石头(NOIP提高组2015 day2 t1)(二分答案) HQG_AC的博客
- NOIP 2015复赛提高组Day2 T1==Codevs 4768 跳石头
- 【NOIP2015提高组】跳石头
- NOIP2015提高组 跳石头
- 4000 NOIP 2015 提高组 Day2 子串
- noip2015 提高组day1、day2
- 【NOIP2015提高组Day2】子串
- 【NOIP 2015 Day2 T1】跳石头(二分)
- Codevs 4768 跳石头 NOIP2015 DAY2 T1
- 跳石头_NOIP2015 Day2 T1_二分+贪心
- NOIP 2015 提高组 Day2 运输计划