题解 | #路灯#

路灯

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;
}



全部评论

相关推荐

2 收藏 评论
分享
牛客网
牛客企业服务