Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u
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.
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.
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 #include2 #include 3 #include 4 #include 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 =x)19 {20 ab=a[i];21 }22 else23 {24 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 else58 ub=mid;59 }60 for(i=1;i lb)62 lb=a[i+1]-a[i];63 printf("%.3lf\n",lb);64 }65 return 0;66 }