题解 | #路灯#
路灯
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; }