Click Open Link
Miaomiao's geometry
Time Limit: 2000/1000 MS (Java/others) memory limit: 65536/65536 K (Java/Others)
Total submission (s): 438 accepted submission (s): 107
Problem descriptionthere are n point on X-axis. miaomiao wowould like to cover them all by using segments with same length.
There are 2 limits:
1. A point is convered if there is a segments t, the point is the left end or the right end of T.
2. The length of the intersection of any two segments equals zero.
For example, point 2 is convered by [2, 4] and not convered by [1, 3]. [1, 2] and [2, 3] are legal segments, [1, 2] and [3, 4] are legal segments, but [1, 3] and [2, 4] are not (the length of intersection doesn't equals zero), [1, 3] and [3, 4] are not (not the same length ).
Miaomiao wants to maximum the length of segements, please tell her the maximum length of segments.
For your information, the point can't coincidently at the same position.
Inputthere are several test cases.
There is a number T (t <= 50) on the first line which shows the number of test cases.
For each test cases, there is a number N (3 <= n <= 50) on the first line.
On the second line, there are n integers AI (-1e9 <= AI <= 1e9) shows the position of each point.
Outputfor each test cases, output a real number shows the answser. Please output three digit after the decimal point.
Sample Input
331 2 331 2 441 9 100 10
Sample output
1.0002.0008.000HintFor the first sample , a legal answer is [1,2] [2,3] so the length is 1.For the second sample , a legal answer is [-1,1] [2,4] so the answer is 2.For the thired sample , a legal answer is [-7,1] , [1,9] , [10,18] , [100,108] so the answer is 8.
Sourcebestcoder round #4
There are N points on the X coordinate, and some line segments must be used to cover all these points. These line segments must not overlap, and must be of the same length. The points on the X coordinate must be the endpoints of the online segment, calculates the maximum length of a line segment.
From the second to the last, find the value with the largest distance between left and right to the array, and output the smallest value of this array, that is, find the maximum and minimum. However, if the data is like this: 2, 7, 8, and 14, then the decisive wa, because 8 and 14 share a section, and this section must be greater than 5 of 2-7 ,.
The correct solution should be to extract the difference value and the difference half of the number from the big to the small enumeration. If the difference meets the requirements, it is the answer.
//15MS268K#include<stdio.h>#include<algorithm>using namespace std;double s[57],array[107];int main(){ int t; scanf("%d",&t); while(t--) { int n,k=0; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%lf",&s[i]); sort(s,s+n); for(int i=1;i<n;i++) { array[k++]=s[i]-s[i-1]; array[k++]=(s[i]-s[i-1])/2; } sort(array,array+k); for(int i=k-1;i>=0;i--) { bool flag=1; double last=s[0],a=array[i]; for(int j=1;j<n-1;j++) { if(last==s[j])continue; if(last+a<=s[j])last=s[j]; else if(s[j]+a<=s[j+1])last=s[j]+a; else {flag=0;break;} } if(flag){printf("%.3lf\n",a);break;} } } return 0;}