BestCoder4——Miaomiao's Geometry(水题。不知道放什么分类)

Miaomiao‘s Geometry

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)

Total Submission(s): 10    Accepted Submission(s): 3

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 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.

AC代码:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <map>
#include <algorithm>
#include <queue>
#include <cmath>

#define INF 0xffffff
#define lln long long

#ifdef ONLINE_JUDGE
#define FOI(file) 0
#define FOW(file) 0
#else
#define FOI(file) freopen(file,"r",stdin);
#define FOW(file) freopen(file,"w",stdout);
#endif

using namespace std;
struct Node
{
    int n;
    bool operator < (const Node &a) const
    {
        return n < a.n;
    }
};

int n;
#define MAXN 51

int a[MAXN];

int main()
{
    //FOI("input");
    //FOW("output");
    //write your programme here

    int i, j, k;
    int t, pre;
    int n, len;
    Node temp;
    priority_queue <Node> q;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d", &n);
        for(i = 0; i < n; i++)
            scanf("%d", &a[i]);

        sort(a, a+n);

        for(i = 0; i < n-1; i++)
        {
            len = a[i+1] - a[i];
            temp.n = len;
            q.push(temp);
        }

        pre = 0;
        bool done = false;
        while(!q.empty())
        {
            while(pre == q.top().n)
            {
                q.pop();
            }
            pre = q.top().n;
            q.pop();

            for(i = 1; i < n; i++)
            {
                if(a[i] - a[i-1] >= pre)
                {
                    done = true;
                    continue;
                }
                else
                {
                    if(i != 1 && i != n-1)
                    {
                        bool x = a[i-1] - a[i-2] >= pre;
                        bool y = a[i+1] - a[i] >= pre;
                        if(x && y)
                        {
                            done = true;
                            continue;
                        }
                        done = false;
                        break;
                    }
                    else
                    {
                        if(i == 1 && a[i+1] - a[i] >= pre)
                        {
                            done = true;
                            continue;
                        }
                        else if(i == n-1 && a[i-1] - a[i-2] >= pre)
                        {
                            done = true;
                            continue;
                        }
                        done = false;
                        break;
                    }
                }
            }
            if(done)
                break;
        }
        while(!q.empty())
            q.pop();
        double s = pre;
        printf("%.3f\n", s);
    }

    return 0;
}

BestCoder4——Miaomiao's Geometry(水题。不知道放什么分类),布布扣,bubuko.com

BestCoder4——Miaomiao's Geometry(水题。不知道放什么分类)

时间: 2024-11-21 05:12:56

BestCoder4——Miaomiao's Geometry(水题。不知道放什么分类)的相关文章

5.1个人赛解题报告(区间dp,按位与或,图论等水题)

这次5.1打了一场个人赛,已经连赛了三周了,有点疲惫感觉,可能自己太水了,每次都有点小紧张. 这次只解出来三道题,然而有一道按位与按位或的水题不知道思路实在是做题太少,还有就是第一题区间DP,也消耗了不少的时间,但是没有成功的写出来,还是不够熟练啊. 下面写报告 A. System Administrator time limit per test 2 seconds memory limit per test 256 megabytes input standard input output

POJ百道水题列表

以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight Moves1101 Gamblers1204 Additive equations 1221 Risk1230 Legendary Pokemon1249 Pushing Boxes 1364 Machine Schedule1368 BOAT1406 Jungle Roads1411 Annive

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两点

枚举+贪心 HDOJ 4932 Miaomiao&#39;s Geometry

题目传送门 1 /* 2 题意:有n个点,用相同的线段去覆盖,当点在线段的端点才行,还有线段之间不相交 3 枚举+贪心:有坑点是两个点在同时一条线段的两个端点上,枚举两点之间的距离或者距离一半,尽量往左边放,否则往右边放, 4 判断一下,取最大值.这题二分的内容少 5 */ 6 #include <cstdio> 7 #include <algorithm> 8 #include <cstring> 9 #include <cmath> 10 using n

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

4.7-4.9补题+水题+高维前缀和

题目链接:51nod 1718 Cos的多项式  [数学] 题解: 2cosx=2cosx 2cos2x=(2cosx)^2-2 2cos3x=(2cosx)^3-3*(2cosx) 数归证明2cos(nx)能表示成关于2cosx的多项式,设为f(n) f(1)=x,f(2)=x^2-2(其中的x就是2cosx) 假设n=1~k时均成立(k>=3) 当n=k+1时 由cos((k+1)x)=cos(kx)cos(x)-sin(kx)sin(x) cos((k-1)x)=cos(kx)cos(x)

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

2.4-?:转C++脑子康复水题训练

4/∞ 这里是日常的脑子康复转C++训练.真是失策啊把第一月计任务和转语言弄一起了 为了转语言刷的水题都羞耻于扔月计上凑数(这个坑用来装羞耻题 一样不放题目,需要的自行baidu.com --------------------- 1.蛇形填数 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #define MAXN 25 5 using namespace std; 6 int a[MAXN]

hdu4932 Miaomiao&#39;s Geometry

这是一道搜索题,我们很容易得到目标值的上下界,然后就只能枚举了. 就是将x轴上的点排序之后从左到右依次考察每个点,每个点要么在线段的左端点,要么在线段的右端点. 点编号从0到n-1,从编号为1的点开始,在枚举的过程中不断压缩上界,有一种情况需要特别讨论,即哪种一条线段恰好覆盖相邻两个点的. 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <map> 5 #i