标签:
Description
Input
Output
Sample Input
Sample Output
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\n",lb); 64 } 65 return 0; 66 }
标签:
原文地址:http://www.cnblogs.com/cyd308/p/4693664.html