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& ...
随机推荐
- DWZ (JUI) 教程 table 排序
dwz排序是后台排序,不是前台的js排序,他的流程和搜索,分页是一样的,当你点击排序的按钮时,从新发送请求刷新当前的navTable 和 dialog. <th width="60&q ...
- hive操作语句使用详解
#创建表人信息表 person(String name,int age) hive> create table person(name STRING,age INT)ROW FORMAT DE ...
- netbeans 优化设置
下面我就以Windows上的NetBeans安装为例,说说如何配置字体. 1.NetBeans界面上的普通字体大小,可以通过配置NetBeans安装目录下netbeans.conf启动文件来实现,这个 ...
- UI4_UIWebView
// // ViewController.m // UI4_UIWebView // // Created by zhangxueming on 15/7/7. // Copyright (c) 20 ...
- 20140215-搭建phonegap开发环境
1.安装jdk,配置环境变量 a)设置 JAVA_HOME =E:\SetUpFiles\win8.1\Java\jdk1.6.0_45 b)设置PATH=E:\SetUpFiles\win8.1\J ...
- C++中delete[]是如何知道数组大小的
先看一段代码: int main(void) { int *pI = new int; int *pArray = new int[10]; int size = *(pArray-1); delet ...
- 素数个数统计——Eratosthenes筛法 [LeetCode 204]
1- 问题描述 Count the number of prime numbers less than a non-negative number, n 2- 算法思想 给出要筛数值的范围 $n$,找 ...
- 【风马一族_git_github】使用Github搭建个人网站
个人网站 访问 https://用户名.github.io ( 风马一族的Github网站 ) 搭建步骤 1)创建个人站点-->新建仓库(注:仓库名必须是[用户名.github.io]) 2) ...
- 《搭建DNS内外网的解析服务》RHEL6
首先说下: 搭建的这个dns内外网的解析,是正向解析,反向解析自己根据正向解析把文件颠倒下就ok了 第一步我们先搭建一个DNS的正反向解析(参考上篇DNS正反向解析,这是上篇做过的) 第二部才是搭建内 ...
- netstat监控大量ESTABLISHED连接与Time_Wait连接问题(转载)
问题描述: 在不考虑系统负载.CPU.内存等情况下,netstat监控大量ESTABLISHED连接与Time_Wait连接. # netstat -n | awk '/^tcp/ {++y[$NF] ...