比赛 哈哈哈 评测结果 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;
    }