hdu4932 Miaomiao's Geometry (BestCoder Round #4 枚举)
Miaomiao's Geometry
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.
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.
3
3
1 2 3
3
1 2 4
4
1 9 100 10
1.000
2.000
8.000HintFor 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.
题意:
求最大可以覆盖全部所给的点的区间长度(所给的点必须处于区间两端)。
思路:
答案一定是相邻点之间的差值或者是相邻点之间的差值除以2,那么把这些可能的答案先算出来。然后依次从最大的開始枚举进行验证就可以。
代码例如以下:
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAXN = 147;
int f[MAXN];//记录线段方向
double p[MAXN];
double d[MAXN];//相邻断点的差值
int n;
void init()
{
memset(p,0,sizeof(p));
memset(f,0,sizeof(f));
memset(d,0,sizeof(d));
} bool Judge(double tt)
{
int i;
for(i = 1; i < n-1; i++)
{
if(p[i] - tt < p[i-1] && p[i] + tt > p[i+1])
break;//不管向左还是向右均为不符合
if(p[i] - tt >= p[i-1])//向左察看
{
if(f[i-1] == 2)//假设前一个是向右的
{
if(p[i] - p[i-1] == tt)
f[i] = 1;//两个点作为线段的两个端点
else if(p[i] - p[i-1] >= 2*tt)//一个向左一个向右
{
f[i] = 1;
}
else if(p[i] + tt <= p[i+1])
{
f[i] = 2;//仅仅能向右
}
else
return false;
}
else
f[i] = 1;
}
else if(p[i] + tt <= p[i+1])
f[i] = 2;
}
if(i == n-1)//所有符合
return true;
return false;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
init();
scanf("%d",&n);
for(int i = 0; i < n; i++)
{
scanf("%lf",&p[i]);
}
sort(p,p+n);
int cont = 0;
for(int i = 1; i < n; i++)
{
d[cont++] = p[i] - p[i-1];
d[cont++] = (p[i] - p[i-1])/2.0;
}
sort(d,d+cont);
double ans = 0;
for(int i = cont-1; i >= 0; i--)
{
memset(f,0,sizeof(f));
f[0] = 1; //開始肯定是让线段向左
if(Judge(d[i]))
{
ans = d[i];
break;
}
}
printf("%.3lf\n",ans);
}
return 0;
}
hdu4932 Miaomiao's Geometry (BestCoder Round #4 枚举)的更多相关文章
- BestCoder Round #4 Miaomiao's Geometry (暴力)
Problem Description There are N point on X-axis . Miaomiao would like to cover them ALL by using seg ...
- HDU 4932 Miaomiao's Geometry(推理)
HDU 4932 Miaomiao's Geometry pid=4932" target="_blank" style="">题目链接 题意: ...
- hdu 4932 Miaomiao's Geometry(暴力)
题目链接:hdu 4932 Miaomiao's Geometry 题目大意:在x坐标上又若干个点,如今要用若干条相等长度的线段覆盖这些点,若一个点被一条线段覆盖,则必须在这条线的左端点或者是右端点, ...
- hdu 4932 Miaomiao's Geometry(暴力枚举)
pid=4932">Miaomiao's Geometry ...
- hdoj 4932 Miaomiao's Geometry 【暴力枚举】
题意:在一条直线上有n个点.取一长度差为x的区间. 规定点必须是区间的端点. 让你找出来最大的x 策略:rt 分析可得:两个相邻点之间的区间要么是两个点的差,要么就是两个点的差的一半,那我们就简单枚举 ...
- 暴力+降复杂度 BestCoder Round #39 1002 Mutiple
题目传送门 /* 设一个b[]来保存每一个a[]的质因数的id,从后往前每一次更新质因数的id, 若没有,默认加0,nlogn复杂度: 我用暴力竟然水过去了:) */ #include <cst ...
- 贪心 BestCoder Round #39 1001 Delete
题目传送门 /* 贪心水题:找出出现次数>1的次数和res,如果要减去的比res小,那么总的不同的数字tot不会少: 否则再在tot里减去多余的即为答案 用set容器也可以做,思路一样 */ # ...
- BestCoder Round #89 02单调队列优化dp
1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01 HDU 5944 水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...
- BestCoder Round #90 //div all 大混战 一题滚粗 阶梯博弈,树状数组,高斯消元
BestCoder Round #90 本次至少暴露出三个知识点爆炸.... A. zz题 按题意copy Init函数 然后统计就ok B. 博弈 题 不懂 推了半天的SG..... 结果这 ...
随机推荐
- form 表单处理
submit相关 当使用 submit 按钮或者 image 或者button type="submit" 来提交表单时,会触发 submit 事件,但是直接javascri ...
- jquery操作html小技巧
1.隐藏table整列 $("#tableID tr").find('td:eq(N)').hide();
- Linux系列教程(十六)——Linux权限管理之ACL权限
通过前面的两篇博客我们介绍了Linux系统的用户管理,Linux用户和用户组管理之相关配置文件 讲解了用户管理的相关配置文件,包括用户信息文件/etc/passwd,用户密码文件/etc/shadow ...
- 使用c#操作txt
如何读取文本文件内容: 在本文介绍的程序中,是把读取的文本文件,用一个richTextBox组件显示出来.要读取文本文件,必须使用到"StreamReader"类,这个类是由名字空 ...
- gcc调试 学习1
gdb进入调试 b 6 在第6行设置断点 d 2 删除num为2的断点 info b 查看断点 run 运行 n 执行到断点1 s 如果下一条是函数就进入函数 n 继续执行 print i 输出i的 ...
- Java中swap()实现
Java中swap()实现 1.今天可爱的谭老师发了一道题目,使用java写方法交换Integer类型数据,而且入参固定了,题目请下图: 入参固定的话,当时想到的是重新定义一个自己的Integer类型 ...
- [转载] 十五分钟介绍 Redis数据结构
转载自http://blog.nosqlfan.com/html/3202.html?ref=rediszt Redis是一种面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存 ...
- [转载] Java中常用的加密方法
转载自http://www.iteye.com/topic/1122076/ 加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的 ...
- python 标准模块shlex
shlex模块为基于Uninx shell语法的语言提供了一个简单的lexer(也就是tokenizer) 举例说明: 有一个文本文件quotes.txt This string has embedd ...
- mybatis中sql语句的批量插入
<!-- 收件箱插入收件信息 --> <insert id="insertReceiveemail"> <!-- 生成一条U ...