路灯问题:
类似于 移动蜂窝网,求蜂窝的最小覆盖距离。 只不过这里换成了一维的。
代码如下:
#include <iostream>
#include<algorithm>
using namespace std;
int main(){
int lampNum;
int len;
int* lampArray;
lampArray=new int;
double d=0.0;
cin>>lampNum;
cin>>len;
for(int i=0;i<lampNum;i++){
cin>>lampArray[i];
}
sort(lampArray,lampArray+lampNum);
for(int i=1;i<lampNum-1;i++){
d = max(d,(lampArray[i+1]-lampArray[i])/2.0 );
}
d=max(d,(double)lampArray[0]);
d=max(d,(double)(len-lampArray[lampNum-1]));
delete lampArray;
printf("%.2f",d);
return 0;
}
结果方面应该是正确的,但是测试没通过,不知道什么原因。
理解:
这里实际上是使用了 条件代换的思想,将求覆盖长度最小,等价为求间距最大。
此外,algorithm库中,包含了很多挺好的函数,使用十分方便。