题解 | #路灯#
路灯
http://www.nowcoder.com/practice/62cdf520b9d94616b6644ac03a0306ff
解题思路:路灯问题其实就是乱序求差值最大问题,既然需要所有的灯的灯光覆盖整条路,故两个灯之间不能有间隙。且假定所有的灯的照射距离d都是相同的。只需要求解路灯中间距最大的两个路灯的距离,即可满足要求。
解题步骤:
1、输入第一行程序
2、将第二行数据插入到新建的vector容器中
3、对乱序的数组进行排序(升序和降序都可以)
4、判断边界edge,因为整条路的坐标存在0和l点,若这两点没有路灯,则需要第一个灯或者最后一个灯可以照亮路头和路尾
5、对排序好的数组两两作差求解最大的间距max_cha(间距/2)
6、最后判断(max_cha/2)和edge的大小,并输出结果。
#include <iostream>
using namespace std;
/***********************************
*思路:为了实现要求需要保证两个条件
*1、n*d>=l;2、ai-d<=ai-1
*本质是找数组中相邻数差值最大的差
*步骤:
*1、输入数据,排序
*************************************/
#include <vector>
#include <algorithm>
#include <iomanip>
// bool com(vector<int>a,vector<int>b)
// {
// return a < b;
// }
void WY2()
{
int n,l; //第一行输入
int a;
double d;
while(cin>>n>>l)
{
vector<int>nums;
for(int i = 0; i <n;i++) //输入第二行数据
{
cin>>a;
nums.push_back(a);
}
sort(nums.begin(),nums.end()); //升序排序
double result = max(nums[0],l - nums[n-1]); //处理边界
for(int i = 0; i< n;i++)
{
result = (nums[i] - nums[i-1])/2.0 > result ? (nums[i]-nums[i-1])/2.0 : result;
}
cout<<setiosflags(ios::fixed);
cout.precision(2);
cout<< result <<endl;
}
}
int main()
{
WY2();
return 0;
}
CVTE公司福利 715人发布

