路灯

来源:互联网 发布:人工智能研发工程师 编辑:程序博客网 时间:2024/04/28 22:21
题目描述

V先生有一天工作到很晚,回家的时候要穿过一条长l的笔直的街道,这条街道上有n个路灯。假设这条街起点为0,终点为l,第i个路灯坐标为ai。路灯发光能力以正数d来衡量,其中d表示路灯能够照亮的街道上的点与路灯的最远距离,所有路灯发光能力相同。为了让V先生看清回家的路,路灯必须照亮整条街道,又为了节省电力希望找到最小的d是多少?

输入

输入两行数据,第一行是两个整数:路灯数目n (1≤n≤1000),街道长度l (1 ≤l≤109)。第二行有n个整数ai (0 ≤ ai≤ l),表示路灯坐标,多个路灯可以在同一个点,也可以安放在终点位置。

输出

输出能够照亮整个街道的最小d,保留两位小数。

样例输入

7 15

15 5 3 7 9 14 0

样例输出

2.50

#include <iostream>#include <algorithm>using namespace std;class streetlight {public:int loc; //路灯的位置 int num; //该位置路灯数量 };int main(){streetlight strl[1000];//整理后路灯位置和数量数组 int  loc[1000];//路灯位置数组int l, n; //道路长度,路灯总数int j = 0;   //记录整理后路灯位置数double d;  //d的值 cin >> n >> l;for (int i = 0; i<n; i++){cin >> loc[i];}sort(loc, loc + n);for (int i = 0; i<n; i++){if (i == 0){strl[j].loc = loc[i];strl[j].num = 1;j++;}else if (strl[j - 1].loc == loc[i]){strl[j - 1].num++;}else{strl[j].loc = loc[i];strl[j].num = 1;j++;}}for (int i = 0; i <= j; i++){double temp;if (i == 0){d = strl[i].loc / strl[i].num;}else{if (i == j)temp = (double)(l - strl[i - 1].loc) / strl[i - 1].num;elsetemp = (double)(strl[i].loc - strl[i - 1].loc) / (strl[i].num + strl[i - 1].num);if (temp>d)d = temp;}}printf("%.2f", d);system("pause");return 0;}


0 0
原创粉丝点击