hdu 4932

枚举差和差的1/2

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

double a[111];
double d[111];
int n;

bool cal(double dis) {
    int ok = 1;
    for(int i=1; i<n-1; i++) {
        if(ok==1) {
            if(a[i]-dis>=a[i-1]) {
                ok=1;
            } else {
                if(a[i]+dis<=a[i+1]) {
                    ok=0;
                    if(a[i]+dis==a[i+1]) {
                        i++;
                        ok=1;
                    }
                } else {
                    return false;
                }
            }
        } else {
            if(a[i]-dis>=a[i-1]+dis) {
                ok=1;
            } else {
                if(a[i]+dis<=a[i+1]) {
                    ok=0;
                    if(a[i]+dis==a[i+1]) {
                        i++;
                        ok=1;
                    }
                } else {
                    return false;
                }
            }
        }
    }
    return true;
}

int main() {
    int T;
    scanf("%d",&T);
    while(T--) {
        scanf("%d",&n);
        for(int i=0; i<n; i++) {
            scanf("%lf",&a[i]);
        }
        int cnt = 0;
        sort(a,a+n);
        for(int i=1; i<n; i++) {
            d[++cnt]=a[i]-a[i-1];
            d[++cnt]=(a[i]-a[i-1])*0.5;
        }
        sort(d+1,d+cnt+1);
        for(int i=cnt; i>=1; i--) {
            if(cal(d[i])) {
                printf("%.3lf\n",d[i]);
                break;
            }
            if(d[i]==d[i+1]) continue;
        }
    }
}

版权声明:都是兄弟,请随意转载,请注明兄弟是谁

时间: 2024-10-12 21:40:42

hdu 4932的相关文章

hdu 4932 Miaomiao&#39;s Geometry 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4932 题目意思:给出 n 个点你,需要找出最长的线段来覆盖所有的点.这个最长线段需要满足两个条件:(1)每个点是某条线段的左端点或右端点   (2)任意两条线段之间的重叠部分的长度为0.(一个点重叠默认长度为0,即[1,2] , [2, 3] 视为合法).还有一点我来补充吧,就是这个最大长度是固定的,看第3组测试数据  1 9 100 10,[-7,1] , [1,9] , [10,18] , [1

HDU 4932 贪心

Miaomiao's Geometry Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 191    Accepted Submission(s): 38 Problem Description There are N point on X-axis . Miaomiao would like to cover them ALL by

hdu 4932 Miaomiao&#39;s Geometry(暴力)

题目链接:hdu 4932 Miaomiao's Geometry 题目大意:在x坐标上又若干个点,现在要用若干条相等长度的线段覆盖这些点,若一个点被一条线段覆盖,则必须在这条线的左端点或者是右端点,并且各个线段放的位置不能又重叠,求最大长度. 解题思路:这题有坑点,比赛的时候o(n)的算法去寻找两点之间最短距离.但起始这样是不行的,比如-1 0 10 12 18 20,这样维护过去的话,最短应该是12~18,长度为6,这段线段可以覆盖12和18的点,然后-1和20又在两端.于是只有0和10两点

HDU 4932 Miaomiao&#39;s Geometry(推理)

HDU 4932 Miaomiao's Geometry 题目链接 题意:给定x轴上一些点(不重复),现在要选一个线段,使得能放进这些区间中,保证线段不跨过点(即线段上只能是最左边或最右边是点),并且没有线段相交,求能放进去的最大线段 思路:推理一下,只有两点之间的线段,还有线段的一半可能符合题意,然后对于每种线段,去判断一下能不能成功放进去,这步用贪心,优先放左边,不行再放右边 代码: #include <cstdio> #include <cstring> #include &

HDU 4932 Miaomiao&#39;s Geometry(BestCoder Round #4)

Problem 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 le

hdu 4932 Miaomiao&#39;s Geometry 暴力枚举

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4932 Miaomiao's Geometry Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 694    Accepted Submission(s): 180 Problem Description There are N point

[BestCoder Round #4] hdu 4932 Miaomiao&#39;s Geometry (贪心)

Miaomiao's Geometry Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 363    Accepted Submission(s): 92 Problem Description There are N point on X-axis . Miaomiao would like to cover them ALL by

hdu 4932 Miaomiao&amp;#39;s Geometry(暴力枚举)

Miaomiao's Geometry                                                                              Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description There are N point on X-axis . Miaomiao would like

hdu 4932 Miaomiao&#39;s Geometry(暴力枚举)

Miaomiao's Geometry                                                                              Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description There are N point on X-axis . Miaomiao would like

HDU 4932 Miaomiao&#39;s Geometry

答案只可能有两种情况 要么是已知点的距离 要么是已知点距离的一半 那么就枚举每个点之间的距离 和距离的一半 先把所有点按照升序排序 然后用枚举的值贪心 对于点A[i] 如果能放[[A[i]-now,A[i]]就放 否则就放[A[i],A[i]+now] #include<bits/stdc++.h> using namespace std; double a[120],b[120]; int main() { int T,N; scanf("%d",&T); for