Canadian Computing Competition: 2018 Stage 1, Senior #1
In the country of Voronoi, there are villages, located at distinct points on a straight road. Each of these villages will be represented by an integer position along this road.
Each village defines its neighbourhood as all points along the road which are closer to it than to any other village. A point which is equally close to two distinct villages and is in the neighbourhood of and also in the neighbourhood of .
Each neighbourhood has a size which is the difference between the minimum (leftmost) point in its neighbourhood and the maximum (rightmost) point in its neighbourhood.
The neighbourhoods of the leftmost and rightmost villages are defined to be of infinite size, while all other neighbourhoods are finite in size.
Determine the smallest size of any of the neighbourhoods (with exactly 1 digit after the decimal point).
Input Specification
The first line will contain the number , the number of villages. On the next lines there will be one integer per line, where the line will contain the integer , the position of the village . All villages are at distinct positions.
Output Specification
Output the smallest neighbourhood size with exactly one digit after the decimal point.
Sample Input
Copy
5
16
0
10
4
15
Sample Output
Copy
3.0
Explanation for Sample Output
The neighbourhoods around and are infinite. The neighbourhood around is units ( to the left, and to the right). The neighbourhood around is units ( to the left and to the right). The neighbourhood around is units ( to the left and to the right).
Solution
import java.util.Arrays;
import java.util.Scanner;
public class A {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt(), loc[] = new int[n];
for(int i = 0; i < n; i++) {
loc[i] = in.nextInt();
}
Arrays.sort(loc);
double ans = 2e9;
for (int i = 1; i < n-1; i++) {
ans = Math.min(ans, (double)(loc[i+1] - loc[i-1])/2);
}
System.out.println(String.format("%.1f", ans));
}
}