Vanya and Lanterns
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Vanya walks late at night along a straight street of length l, lit by n lanterns. Consider the coordinate system with the beginning of the street corresponding to the point 0, and its end corresponding to the point l. Then the i-th lantern is at the point ai. The lantern lights all points of the street that are at the distance of at most d from it, where d is some positive number, common for all lanterns.
Vanya wonders: what is the minimum light radius d should the lanterns have to light the whole street?
Input
The first line contains two integers n, l (1?≤?n?≤?1000, 1?≤?l?≤?109) ? the number of lanterns and the length of the street respectively.
The next line contains n integers ai (0?≤?ai?≤?l). Multiple lanterns can be located at the same point. The lanterns may be located at the ends of the street.
立即学习“前端免费学习笔记(深入)”;
Output
Print the minimum light radius d, needed to light the whole street. The answer will be considered correct if its absolute or relative error doesn't exceed 10?-?9.
Sample test(s)
input
7 1515 5 3 7 9 14 0
output
2.5000000000
input
2 52 5
output
2.0000000000
Note
Consider the second sample. At d?=?2 the first lantern will light the segment [0,?4] of the street, and the second lantern will light segment[3,?5]. Thus, the whole street will be lit.
题意:有一条长度为 l 的街道,在这条街道上放置了n个相同的灯,设从一端位置为0,每个灯的位置在ai处,问灯的最小照射半径为多少时,才能满足整条街道都能被灯光照到。
分析:贪心,由于除了两端的两个灯之外,每两个灯之间都是由两个灯共同照射的,故只需要求出两两灯之间的距离一半的最大值,再求出两端两个灯距离街道两端尽头的距离,三者的最大值就是所求的最小半径。
AC代码:
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <time.h>using namespace std;#define INF 0x7fffffffint a[1005];int main(){ #ifdef sxk freopen("in.txt","r",stdin); #endif int n, l; while(scanf("%d%d",&n, &l)!=EOF) { for(int i=1; i<=n; i++){ scanf("%d", &a[i]); } sort(a+1, a+n+1); a[0] = 0; a[n+1] = l; int ma = 0; int x = a[1] - a[0], xx = a[n+1] - a[n]; for(int i=1; i<n; i++){ a[i] = a[i+1] - a[i]; if(a[i] > ma) ma = a[i]; } ma = max(2*x, max(ma, 2*xx)); double ans = ma / 2.0; printf("%.10lf\n", ans); } return 0;}贪心思想真是无处不在呀o(∩∩)o...
HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号