1. 程式人生 > >賽碼網-基本演算法-4.路燈

賽碼網-基本演算法-4.路燈

題目描述
									

V先生有一天工作到很晚,回家的時候要穿過一條長l的筆直的街道,這條街道上有n個路燈。假設這條街起點為0,終點為l,第i個路燈座標為ai。路燈發光能力以正數d來衡量,其中d表示路燈能夠照亮的街道上的點與路燈的最遠距離,所有路燈發光能力相同。為了讓V先生看清回家的路,路燈必須照亮整條街道,又為了節省電力希望找到最小的d是多少?

輸入

輸入兩行資料,第一行是兩個整數:路燈數目n (1≤n≤1000),街道長度l (1 ≤l≤109)。第二行有n個整數ai (0 ≤ ai≤ l),表示路燈座標,多個路燈可以在同一個點,也可以安放在終點位置。

樣例輸入

7 15

15 5 3 7 9 14 0

輸出

輸出能夠照亮整個街道的最小d,保留兩位小數。

樣例輸出

2.50

時間限制C/C++語言:1000MS其它語言:3000MS 記憶體限制C/C++語言:65536KB其它語言:589824KB

解答:
import java.util.Arrays;
import java.util.Scanner;

/**
 * Created by Administrator on 2017/4/27.
 */
public class four_StreetLamp {
    public static void main(String args[]){
        java.text.DecimalFormat decimalFormat=new java.text.DecimalFormat("#.00");
        Scanner scanner=new Scanner(System.in);
        int x=0;int y=0;
        double p=0;double q=0;
        int left=1;int right=1;
        int n=scanner.nextInt();
        int l=scanner.nextInt();
        int Streetlamp[]=new int[n];
        for(int i=0;i<n;i++){
            Streetlamp[i]=scanner.nextInt();
            if(Streetlamp[i]==0) left=0;
            if(Streetlamp[i]==l) right=0;
        }
        Arrays.sort(Streetlamp);

        if(left==1) p=Streetlamp[0]-0;
        if(right==1) q=l-Streetlamp[n-1];
        for(int i=0;i<n-1;i++){
            y=Streetlamp[i+1]-Streetlamp[i];
            if(y>x) x=y;
        }
        double z=(double)x/2;
        double max1=(p>q)?p:q;
        double max2=(z>max1)?z:max1;
        System.out.println(decimalFormat.format(max2));
    }
}