这是一道搜索题,我们很容易得到目标值的上下界,然后就只能枚举了。

就是将x轴上的点排序之后从左到右依次考察每个点,每个点要么在线段的左端点,要么在线段的右端点。

点编号从0到n-1,从编号为1的点开始,在枚举的过程中不断压缩上界,有一种情况需要特别讨论,即哪种一条线段恰好覆盖相邻两个点的。

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <string>
#include <vector>
#include <set>
#include <cmath>
#include <ctime>
#pragma comment(linker, "/STACK:102400000,102400000")
#define lson (u << 1)
#define rson (u << 1 | 1)
#define rep(i, a, b) for(i = a; i < b; i++)
#define reps(i, a, b, c) for(i = a; i < b; i += c)
#define repi(i, a, b) for(i = a; i >= b; i--)
#define cls(i, j) memset(i, j, sizeof i)
using namespace std;
typedef __int64 ll;
const double eps = 1e-;
const double pi = acos(-1.0);
const int maxn = 1e5 + ;
const int maxm = ;
const int inf = 0x3f3f3f3f;
const ll linf = 0x3fffffffffffffff;
const ll mod = 1e9 + ; double a[];
int n;
double maxi, mini; double dfs(int u, int pre, double limit, int fixed){
//printf("%d %d\n",u, pre);
if(u >= n - ) return limit;
if(limit <= mini) return mini;
double to_left = a[u] - a[pre];
double to_right = a[u + ] - a[u];
double tem;
if(fixed){
if(to_left >= limit) return dfs(u + , u, limit, );
if(to_right >= * limit || to_right == limit) return dfs(u + , u + , limit, );
if(to_right > limit) return dfs(u + , u + , limit, );
if(to_right < limit) return mini;
}
if(to_left >= limit) return dfs(u + , u, limit, );
double tem1 = dfs(u + , u, to_left, );
double tem2 = mini;
if(to_right >= * limit) tem2 = dfs(u + , u + , limit, );
else{
if(to_right <= limit) tem2 = dfs(u + , u + , to_right, );
double tem3 = mini;
if(limit >= to_right / ) tem3 = dfs(u + , u + , to_right / , );
tem2 = max(tem2, tem3);
tem3 = dfs(u + , u + , min(to_right, limit), );
tem3 = max(tem2, tem3);
if(limit < to_right / ) tem3 = dfs(u + , u + , limit, );
tem2 = max(tem2, tem3);
}
return max(tem1, tem2);
} int main(){
// freopen("in.txt", "r", stdin);
int T;
scanf("%d", &T);
while(T--){
scanf("%d", &n);
int i;
rep(i, , n) scanf("%lf", &a[i]);
sort(a, a + n);
a[n] = ;
mini = (double)linf;
rep(i, , n) mini = min(mini, a[i] - a[i - ]);
maxi = (double)linf;
rep(i, , n - ) maxi = min(maxi, max(a[i + ] - a[i], a[i] - a[i - ]));
double ans = dfs(, , maxi, );
printf("%.3f\n", ans);
}
return ;
}

hdu4932 Miaomiao's Geometry的更多相关文章

  1. hdu4932 Miaomiao&#39;s Geometry (BestCoder Round #4 枚举)

    题目链接:pid=4932" style="color:rgb(202,0,0); text-decoration:none">http://acm.hdu.edu ...

  2. BestCoder Round #4 之 Miaomiao's Geometry(2014/8/10)

    最后收到邮件说注意小数的问题!此代码并没有过所有数据,请读者参考算法, 自己再去修改一下吧!注意小数问题! Miaomiao's Geometry Time Limit: 2000/1000 MS ( ...

  3. 枚举+贪心 HDOJ 4932 Miaomiao's Geometry

    题目传送门 /* 题意:有n个点,用相同的线段去覆盖,当点在线段的端点才行,还有线段之间不相交 枚举+贪心:有坑点是两个点在同时一条线段的两个端点上,枚举两点之间的距离或者距离一半,尽量往左边放,否则 ...

  4. Miaomiao's Geometry

    HDU 4932  Bestcoder Problem Description There are N point on X-axis . Miaomiao would like to cover t ...

  5. 【HDOJ】4932 Miaomiao's Geometry

    递归检测.因为dis数组开的不够大,各种wa.写了个数据发生器,果断发现错误,改完就过了. #include <cstdio> #include <cstring> #incl ...

  6. BestCoder4 1002 Miaomiao's Geometry (hdu 4932) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4932 题目意思:给出 n 个点你,需要找出最长的线段来覆盖所有的点.这个最长线段需要满足两个条件:(1 ...

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

    HDU 4932 Miaomiao's Geometry pid=4932" target="_blank" style="">题目链接 题意: ...

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

    题目链接:hdu 4932 Miaomiao's Geometry 题目大意:在x坐标上又若干个点,如今要用若干条相等长度的线段覆盖这些点,若一个点被一条线段覆盖,则必须在这条线的左端点或者是右端点, ...

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

    pid=4932">Miaomiao's Geometry                                                               ...

随机推荐

  1. Orthomcl的详细使用

    参考了众多文章并结合实际操作后的感想. 参考:http://www.plob.org/2013/09/18/6174.html 参考:http://www.plob.org/2012/06/12/22 ...

  2. sql server常见服务

    根据您决定安装的组件,SQL Server 安装程序将安装以下服务: SQL Server Database Services - 用于 SQL Server 关系数据库引擎的服务. 可执行文件为 & ...

  3. 查询功能:yum [list|info|search|provides|whatprovides] 参数

    [root@www ~]# yum [option] [查询工作项目] [相关参数] 选项与参数: [option]:主要的选项,包括有:   -y :当 yum 要等待使用者输入时,这个选项可以自动 ...

  4. Leetcode: Arithmetic Slices

    A sequence of number is called arithmetic if it consists of at least three elements and if the diffe ...

  5. Java日志管理方法(转载)

    原文地址:http://www.cnblogs.com/leocook/p/log_java.html java开发中常见的几种日志管理方案有以下4种: 1. Commons-logging + lo ...

  6. html 标签内部元素左右居中

    <div style="width: 500px; height: 500px; border: 1px solid red; text-align: center;"> ...

  7. MES: ESB

    ESB定义了消息的收发和收发池,对于各种通讯方式定义了收发API,在收到信息后由eventBus来发布消息 ISender: public abstract interface ISender { p ...

  8. 变形--旋转 rotate()

    旋转rotate()函数通过指定的角度参数使元素相对原点进行旋转.它主要在二维空间内进行操作,设置一个角度值,用来指定旋转的幅度.如果这个值为正值,元素相对原点中心顺时针旋转:如果这个值为负值,元素相 ...

  9. cluster集群

    http://zwfang09.blog.sohu.com/entry/ Cluster 集群 ,群集 --- 负载均衡 LB ,load-balance --- 高可用集群 HA ,High Ava ...

  10. C#访问PostGreSQL数据库的方法 http://www.jb51.net/article/35643.htm

    这次的项目中的一个环节要求我把PostGreSQL数据取出来,然后放到SqlServer里,再去处理分析. http://www.jb51.net/article/35643.htm - 我对Post ...