zoukankan      html  css  js  c++  java
  • 二分 例题3

    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 #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 }
    View Code
  • 相关阅读:
    E语言一种特殊的找按钮事件方法
    一个后门木马的简单分析
    win32汇编学习笔记
    偶尔那么蛋疼一次
    新建springboot子模块时,pom文件project根标签会报红
    SQL Server 中用While循环替代游标(Cursor的解决方案
    修改IIS设置延长DEBUG时间
    SharePoint 201 ListViewByQuery Control 应用
    Add ContentType to pages library
    SharePoint 2010 如何取得ListItem的Attachements
  • 原文地址:https://www.cnblogs.com/cyd308/p/4693664.html
Copyright © 2011-2022 走看看