zoukankan      html  css  js  c++  java
  • CF492B

    题意

    一条长为L的路,在n个不同的位置都放置了路灯,灯光半径相同,问半径至少为多少时灯光可以覆盖整条路。

    那我们就先排序,使灯的位置是从路的一边依次排到另一边的
    ,然后求出两两挨着的灯之间距离的最大值,因为灯光半径相等,所以两盏灯之间的距离就是两盏灯灯光的半径之和(也就是一盏灯灯光的直径),就把这个值除以二记录下来。

    然后,因为要求整个道路全部被灯光覆盖,所以把刚刚记录的那个值与路最两端的灯到路两端的距离做比较取最大值(因为路的两段不会发光,所以覆盖这两段的只能是最边上的灯的半径,因此不用再把这个值除以二

    最后代码

    #include<iostream>
    #include<cstdlib>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #define maxn 100010
    
    using namespace std;
    
    int main(){
    	int n;
    	double l,a[10010];
    	double w=0;
    	cin>>n>>l;
    	for(int i=1;i<=n;i++){
    		cin>>a[i];
    	}
    	a[n+1]=l;
    	a[0]=0;
    	sort(a+1,a+n+1);
    	for(int i=1;i<=n;i++){
    		w=max(w,a[i]-a[i-1]);
    	}
    	w=max(a[1],w/2);
    	w=max(l-a[n],w);
    	printf("%.9lf",w);
    	return 0;
    }
    
  • 相关阅读:
    二分法
    The Distinguish of the share or static lib in MFC
    内部或外部命令
    The Memory Managerment of the Computer
    AfxWinInit
    NoSQL解决方案比较
    修改服务中可执行文件的路径
    MapReduce 笔记
    认识MongoDB
    Add a Console Application
  • 原文地址:https://www.cnblogs.com/KnightL/p/13935543.html
Copyright © 2011-2022 走看看