Description
There are N point on X-axis . Miaomiao would 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.
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.
Input
There 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.
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.
Output
For each test cases , output a real number shows the answser. Please output three digit after the decimal point.
Sample Input
3
3
1 2 3
3
1 2 4
4
1 9 100 10
Sample Output
1.000
2.000
8.000
Hint
For 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.
代码:
为什么要加后面那一段再判一下呢?删掉就错了呢?为什么呢?我也不知道啊,是吧?
1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 #include <algorithm> 5 using namespace std; 6 7 const double inf=1e9+7; 8 9 int n; 10 double a[56]; 11 12 bool C(double x) 13 { 14 int i; 15 double ab=a[1]; 16 for(i=2;i<n;i++) 17 { 18 if(a[i]-ab>=x) 19 { 20 ab=a[i]; 21 } 22 else 23 { 24 if(a[i+1]-a[i]<x) 25 return false; 26 else if(a[i+1]-a[i]==x) 27 { 28 ab=a[i+1]; 29 i++; 30 } 31 else if(a[i+1]-a[i]>x) 32 { 33 ab=a[i]+x; 34 } 35 } 36 } 37 return true; 38 } 39 40 int main() 41 { 42 int T; 43 int i,j; 44 scanf("%d",&T); 45 while(T--) 46 { 47 scanf("%d",&n); 48 for(i=1;i<=n;i++) 49 scanf("%lf",&a[i]); 50 sort(a+1,a+n+1); 51 double lb=0,ub=inf; 52 for(i=1;i<=100;i++) 53 { 54 double mid=(lb+ub)/2.0; 55 if(C(mid)) 56 lb=mid; 57 else 58 ub=mid; 59 } 60 for(i=1;i<n;i++) 61 if(C(a[i+1]-a[i]) && (a[i+1]-a[i])>lb) 62 lb=a[i+1]-a[i]; 63 printf("%.3lf ",lb); 64 } 65 return 0; 66 }