2433: [Noi2011]智能车比赛 - BZOJ
Description
新一届智能车大赛在JL大学开始啦!比赛赛道可以看作是由n个矩形区域拼接而成(如下图所示),每个矩形的边都平行于坐标轴,第i个矩形区域的左下角和右上角坐标分别为(xi,1,yi,1)和(xi,2,yi,2)。
题目保证:xi,1<xi,2=xi+1,1,且yi,1< yi,2,相邻两个矩形一定有重叠在一起的边(如图中虚线所示),智能车可以通过这部分穿梭于矩形区域之间。
选手们需要在最快的时间内让自己设计的智能车从一个给定的起点S点到达一个给定的终点T点,且智能车不能跑出赛道。假定智能车的速度恒为v且转向不消耗任何时间,你能算出最快需要多少时间完成比赛么?
Input
输入的第一行包含一个正整数n,表示组成赛道的矩形个数。
接下来n行描述这些矩形,其中第i行包含4个整数xi,1, yi,1, xi,2, yi,2,表示第i个矩形左下角和右上角坐标分别为(xi,1, yi,1)和(xi,2, yi,2)。
接下来一行包含两个整数xS, yS,表示起点坐标。
接下来一行包含两个整数xT, yT,表示终点坐标。
接下来一行包含一个实数v,表示智能车的速度。
Output
仅输出一个实数,至少精确到小数点后第六位,为智能车完成比赛的最快时间。
对于每个测试点,如果你的输出结果和参考结果相差不超过10^-6,该测试点得满分,否则不得分。
Sample Input
2
1 12 2
203 4
1 1
30
1.0
Sample Output
2.41421356
HINT
有精度误差,请不要提交
N<=2000,所输入数字为绝对值小于40000的整数
囧,其实是一道比较简单的dp,一直犯了一个sb错误,没有好好地更新视野,我只用了视野中的点更新视野,操蛋
我们可以从左到右dp,判断是否可以到达,然后更新ans,这个我们只要记录两个点,一个是视野的上界,一个是视野的下界,然后没有视野就break,非常快
const
maxn=;
inf=;
type
point=record
x,y:longint;
end; function max(x,y:longint):longint;
begin
if x>y then exit(x);
exit(y);
end; function min(x,y:longint):longint;
begin
if x<y then exit(x);
exit(y);
end; function min(x,y:double):double;
begin
if x<y then exit(x);
exit(y);
end; function max(x,y:double):double;
begin
if x>y then exit(x);
exit(y);
end; procedure swap(var x,y:point);
var
t:point;
begin
t:=x;x:=y;y:=t;
end; operator -(a,b:point)c:point;
begin
c.x:=a.x-b.x;
c.y:=a.y-b.y;
end; operator *(a,b:point)c:longint;
begin
exit(a.x*b.y-a.y*b.x);
end; function dis(a,b:point):double;
begin
exit(sqrt(sqr(a.x-b.x)+sqr(a.y-b.y)));
end; var
a:array[..maxn,..]of point;
f:array[..maxn,..]of double;
s,t:point;
n:longint;
v:double; procedure main;
var
i,j,k,l,r:longint;
up,down:point;
begin
read(n);
for i:= to n do
read(a[i,].x,a[i,].y,a[i,].x,a[i,].y);
read(s.x,s.y,t.x,t.y,v);
if s.x>t.x then swap(s,t);
l:=n;r:=;
while (a[l,].x>s.x) or (a[l,].y>s.y) or (a[l,].x<s.x) or (a[l,].y<s.y) do dec(l);
while (a[r,].x>t.x) or (a[r,].y>t.y) or (a[r,].x<t.x) or (a[r,].y<t.y) do inc(r);
dec(r);
for i:= to n- do
a[i,].y:=max(a[i,].y,a[i+,].y);
for i:= to n- do
a[i,].y:=min(a[i,].y,a[i+,].y);
for i:= to n- do a[i,].x:=a[i,].x;
dec(l);a[l,]:=s;a[l,]:=s;
inc(r);a[r,]:=t;a[r,]:=t;
for i:=l+ to r do
for j:= to do
f[i,j]:=inf;
for i:=l to r do
for j:= to do
begin
up:=a[i+,];down:=a[i+,];
for k:=i+ to r do
begin
if (down-a[i,j])*(up-a[i,j])< then break;
if ((a[k,]-a[i,j])*(up-a[i,j])>=) and ((down-a[i,j])*(a[k,]-a[i,j])>=) then
f[k,]:=min(f[k,],f[i,j]+dis(a[i,j],a[k,])/v);
if ((a[k,]-a[i,j])*(up-a[i,j])>=) and ((down-a[i,j])*(a[k,]-a[i,j])>=) then
f[k,]:=min(f[k,],f[i,j]+dis(a[i,j],a[k,])/v);
if (a[k,]-a[i,j])*(up-a[i,j])>= then up:=a[k,];
if (down-a[i,j])*(a[k,]-a[i,j])>= then down:=a[k,];
end;
end;
writeln(f[r,]::);
end; begin
main;
end.
2433: [Noi2011]智能车比赛 - BZOJ的更多相关文章
- [bzoj2433][Noi2011]智能车比赛
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2433 http://221.192.240.123:8586/JudgeOnline/ ...
- Noi2011 : 智能车比赛
假设S在T左边,那么只能往右或者上下走 f[i]表示S到i点的最短路 f[i]=min(f[j]+dis(i,j)(i能看到j)) 判断i能看到j就维护一个上凸壳和一个下凸壳 时间复杂度$O(n^2) ...
- [NOI2011]智能车比赛 (计算几何 DAG)
/* 可以发现, 最优路径上的所有拐点, 基本上都满足一定的性质, 也就是说是在矩形上的拐角处 所以我们可以把他们提出来, 单独判断即可 由于我们提出来的不超过2n + 2个点, 我们将其按照x坐标排 ...
- 【[NOI2011]智能车比赛】(建图+spfa+坑爹精度)
过了这题我就想说一声艹,跟这个题死磕了将近6个小时,终于是把这个题死磕出来了.首先看到这个题的第一反应,和当初做过的一个房间最短路比较相似,然后考虑像那个题那样建边,然后跑最短路.(具体建边方法请参考 ...
- BZOJ 2433 智能车比赛(计算几何+最短路)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2433 题意:若干个矩形排成一排(同一个x之上最多有一个矩形),矩形i和i+1相邻.给定两 ...
- 【LOJ】#2443. 「NOI2011」智能车比赛
题解 显然是个\(n^2\)的dp 我们要找每个点不穿过非赛道区域能到达哪些区域的交点 可以通过控制两条向量负责最靠下的上边界,和最靠上的下边界,检查当前点在不在这两条向量之间即可,对于每个点可以\( ...
- 智能车学习(十五)——K60野火2013版例程
一.中断函数注册方法: 1.格式: 配置某个功能的中断 注册中断函数 开启中断 2.一个例子 pit_init_ms(PIT0,);//定时中断初始化 set_vector_handler(PIT0_ ...
- K60平台智能车开发工作随手记
(图片仅为示例,并不一定固定为这种造型) 第十二届全国大学生智能汽车竞赛有一个分项是光电四轮车的竞速(任务A),Seven她们组采购到的配件使用了freescale Crotex-M4内核的CPU,T ...
- 【sky第二期--PID算法】--【智能车论坛】
[sky第二期--PID算法] 想学PID的可以来[智能车论坛]这里有我发布的资料http://bbs.tekbots.eefocus.com/forum.php?mod=viewthread& ...
随机推荐
- 无需操作系统和虚拟机,直接运行Python代码
Josh Triplett以一个“笑点”开始了他在PyCon 2015上的演讲:移植Python使其无需操作系统运行:他和他的英特尔同事让解释器能够在GRUB引导程序.BIOS或EFI系统上运行.连演 ...
- JavaScript之延迟加载
本文参阅http://www.appelsiini.net/projects/lazyload Javascript Lazyload延迟加载特效,有效降低HTPP连接次数,提高首屏加载时间 1.增加 ...
- C# 类构造函数赋值里属性与字段赋值注意项
public class Test { public Test(int age) { this.Age=age;//如果这里使用的是this.age=age;那么属性里的判断将不会执行 } priva ...
- ASP.NET发布WebService
1. 创建一个空的Web应用程序 2. 再添加一个Web服务 3. 在所创建Web服务内,编写一算法 4. 写完可直接运行查看结果 5. 项目->右键,发布此WebService 6. 发布至 ...
- Cocos2d-JS特效
Cocos2d-JS提供了很多特效,这些特效事实上属于间隔动作,特效类cc.GridAction类,也称为网格动作,它的类图如下图所示. 网格动作类图 网格动作cc.GridAction它有两个主要的 ...
- GPRS组网的几种方案【来自网络】
GPRS组网的几种方案:1) 方案一:中心采用ADSL等INTELNET公网连接,采用公网固定IP或者公网动态IP+DNS解析服务.此种方案向先INTERNET运营商申请ADSL等宽带业务. ...
- C++ Bitsets
C++ Bitsets给程序员提供一种位集合的数据结构.Bitsets使用许多二元操作符,比如逻辑和,或等. Constructors 创建新bitsets Operators 比较和赋值bitset ...
- 洛谷 P2670 扫雷游戏==Codevs 5129 扫雷游戏
题目描述 扫雷游戏是一款十分经典的单机小游戏.在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格).玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有 ...
- 1103 POI2007 大都市meg
树链剖分水过,单点修改,树状数组即可. #include <cstdio> #include <cstring> #include <cstdlib> #inclu ...
- Windows Phone 中查找可视化树中的某个类型的元素
private void StackPanel_Tap(object sender, TappedRoutedEventArgs e) { //获取到的对象是ListBoxItem ListBoxIt ...