比赛 |
哈哈哈 |
评测结果 |
AAAAAAAAAA |
题目名称 |
跳石头 |
最终得分 |
100 |
用户昵称 |
瑆の時間~無盡輪迴·林蔭 |
运行时间 |
0.055 s |
代码语言 |
C++ |
内存使用 |
3.34 MiB |
提交时间 |
2019-03-07 21:56:44 |
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
int st[50002];
int ans=0;
int n,m,l,le=1,ri,mid;
bool judge(int qz)
{
int jl=0,now=0;
for(int i=1;i<=n+1;i++)
{
if(st[i]-st[now]<qz)
jl++;
else
now=i;
}
if(jl<=m)
return true;
else
return false;
}
int main()
{
freopen("2015stone.in","r",stdin);
freopen("2015stone.out","w",stdout);
scanf("%d%d%d",&l,&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&st[i]);
ri=l;
st[n+1]=l;
while (le<=ri){//非递归式二分正常向写法,可理解为一般框架
mid=(le+ri)/2;//这再看不出是啥意思可以退群了
if (judge(mid)){//带入judge函数判断当前解是不是可行解
ans=mid;
le=mid+1;//走到这里,看来是可行解,我们尝试看看是不是有更好的可行解
}
else
ri=mid-1;//噫,你找了个非法解,赶紧回到左半边看看有没有可行解
}
cout<<ans;
return 0;
}