codeforces CF 492 B 二分搜索

分析:

        对半径d采用二分搜索,需要注意的是,需要提前对路灯的位置排序。需要对题目注意的是精度问题exp=1e-9.

代码:

    

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1005;
const double eE = 1e-9;
int a[maxn];
int n, l;
int check(double u) {
	for (int i = 0; i<n; ++i) {
	    if (!i&&a[i] - u>0) {
	    	return -1;
	    }
	    else if (a[i] - a[i - 1]>2 * u) {
		return -1;
	    }
	    if(i+1==n&&a[i]+u<l){
                return -1;
	    }
	}
        return -2;
}

double binarySearch(double ll, double h) {
    int cnt=0;
    while (ll+eE<h&&cnt<200) {
        cnt++;
	double d = (ll+h)/2;
	int x = check(d);
	if (x == -1) {//d太小
		ll = d;
	}
	else if (x == -2) {
		h = d;
	}
    }
    return ll;
}
int main(void) {
	scanf("%d%d", &n, &l);
	for (int i = 0; i<n; i++) {
		scanf("%d", &a[i]);
	}
	sort(a, a + n);
	printf("%.10f\n", binarySearch(0, l));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值