有点不理解 求大佬解答!!
查看原帖
有点不理解 求大佬解答!!
265048
dsfd楼主2020/6/8 16:54
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int compare(int* a, int ans, int n, int m)//
{
	int i, j=0, k=0;//k为最后一个没有被丢弃的石头
	for(i=1;i<=n+1;i++)
	{
		if(a[i]-a[k]<ans)//需要丢弃的石头
		{
			j++;
		}
		else
			k=i;
	}
	if(j<=m)//答案可以满足 向更大处搜索
		return 1;
	//答案无法满足 向小处搜索
	return 0;
}

int main()
{
    int l, n, m, ans;
    scanf("%d%d%d", &l, &n, &m);

    int distance[n+2];
    int i;
    for(i=1;i<=n;i++)
	scanf("%d", &distance[i]);
    distance[i+1]=l;
    distance[0]=0;

    int j=1, mid;
    i=l;
    while(i>=j)
    {
	mid=(i+j)/2;
	/*printf("%d ", mid);*/
	if(compare(distance, mid, n, m))
	{
		ans=mid;
		j=mid+1;
	}
	else
		i=mid-1;
    }

    printf("%d", ans);

    return 0;
}

2020/6/8 16:54
加载中...