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,非常快

  1. const
  2. maxn=;
  3. inf=;
  4. type
  5. point=record
  6. x,y:longint;
  7. end;
  8.  
  9. function max(x,y:longint):longint;
  10. begin
  11. if x>y then exit(x);
  12. exit(y);
  13. end;
  14.  
  15. function min(x,y:longint):longint;
  16. begin
  17. if x<y then exit(x);
  18. exit(y);
  19. end;
  20.  
  21. function min(x,y:double):double;
  22. begin
  23. if x<y then exit(x);
  24. exit(y);
  25. end;
  26.  
  27. function max(x,y:double):double;
  28. begin
  29. if x>y then exit(x);
  30. exit(y);
  31. end;
  32.  
  33. procedure swap(var x,y:point);
  34. var
  35. t:point;
  36. begin
  37. t:=x;x:=y;y:=t;
  38. end;
  39.  
  40. operator -(a,b:point)c:point;
  41. begin
  42. c.x:=a.x-b.x;
  43. c.y:=a.y-b.y;
  44. end;
  45.  
  46. operator *(a,b:point)c:longint;
  47. begin
  48. exit(a.x*b.y-a.y*b.x);
  49. end;
  50.  
  51. function dis(a,b:point):double;
  52. begin
  53. exit(sqrt(sqr(a.x-b.x)+sqr(a.y-b.y)));
  54. end;
  55.  
  56. var
  57. a:array[..maxn,..]of point;
  58. f:array[..maxn,..]of double;
  59. s,t:point;
  60. n:longint;
  61. v:double;
  62.  
  63. procedure main;
  64. var
  65. i,j,k,l,r:longint;
  66. up,down:point;
  67. begin
  68. read(n);
  69. for i:= to n do
  70. read(a[i,].x,a[i,].y,a[i,].x,a[i,].y);
  71. read(s.x,s.y,t.x,t.y,v);
  72. if s.x>t.x then swap(s,t);
  73. l:=n;r:=;
  74. 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);
  75. 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);
  76. dec(r);
  77. for i:= to n- do
  78. a[i,].y:=max(a[i,].y,a[i+,].y);
  79. for i:= to n- do
  80. a[i,].y:=min(a[i,].y,a[i+,].y);
  81. for i:= to n- do a[i,].x:=a[i,].x;
  82. dec(l);a[l,]:=s;a[l,]:=s;
  83. inc(r);a[r,]:=t;a[r,]:=t;
  84. for i:=l+ to r do
  85. for j:= to do
  86. f[i,j]:=inf;
  87. for i:=l to r do
  88. for j:= to do
  89. begin
  90. up:=a[i+,];down:=a[i+,];
  91. for k:=i+ to r do
  92. begin
  93. if (down-a[i,j])*(up-a[i,j])< then break;
  94. if ((a[k,]-a[i,j])*(up-a[i,j])>=) and ((down-a[i,j])*(a[k,]-a[i,j])>=) then
  95. f[k,]:=min(f[k,],f[i,j]+dis(a[i,j],a[k,])/v);
  96. if ((a[k,]-a[i,j])*(up-a[i,j])>=) and ((down-a[i,j])*(a[k,]-a[i,j])>=) then
  97. f[k,]:=min(f[k,],f[i,j]+dis(a[i,j],a[k,])/v);
  98. if (a[k,]-a[i,j])*(up-a[i,j])>= then up:=a[k,];
  99. if (down-a[i,j])*(a[k,]-a[i,j])>= then down:=a[k,];
  100. end;
  101. end;
  102. writeln(f[r,]::);
  103. end;
  104.  
  105. begin
  106. main;
  107. end.

2433: [Noi2011]智能车比赛 - BZOJ的更多相关文章

  1. [bzoj2433][Noi2011]智能车比赛

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2433 http://221.192.240.123:8586/JudgeOnline/ ...

  2. Noi2011 : 智能车比赛

    假设S在T左边,那么只能往右或者上下走 f[i]表示S到i点的最短路 f[i]=min(f[j]+dis(i,j)(i能看到j)) 判断i能看到j就维护一个上凸壳和一个下凸壳 时间复杂度$O(n^2) ...

  3. [NOI2011]智能车比赛 (计算几何 DAG)

    /* 可以发现, 最优路径上的所有拐点, 基本上都满足一定的性质, 也就是说是在矩形上的拐角处 所以我们可以把他们提出来, 单独判断即可 由于我们提出来的不超过2n + 2个点, 我们将其按照x坐标排 ...

  4. 【[NOI2011]智能车比赛】(建图+spfa+坑爹精度)

    过了这题我就想说一声艹,跟这个题死磕了将近6个小时,终于是把这个题死磕出来了.首先看到这个题的第一反应,和当初做过的一个房间最短路比较相似,然后考虑像那个题那样建边,然后跑最短路.(具体建边方法请参考 ...

  5. BZOJ 2433 智能车比赛(计算几何+最短路)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2433 题意:若干个矩形排成一排(同一个x之上最多有一个矩形),矩形i和i+1相邻.给定两 ...

  6. 【LOJ】#2443. 「NOI2011」智能车比赛

    题解 显然是个\(n^2\)的dp 我们要找每个点不穿过非赛道区域能到达哪些区域的交点 可以通过控制两条向量负责最靠下的上边界,和最靠上的下边界,检查当前点在不在这两条向量之间即可,对于每个点可以\( ...

  7. 智能车学习(十五)——K60野火2013版例程

    一.中断函数注册方法: 1.格式: 配置某个功能的中断 注册中断函数 开启中断 2.一个例子 pit_init_ms(PIT0,);//定时中断初始化 set_vector_handler(PIT0_ ...

  8. K60平台智能车开发工作随手记

    (图片仅为示例,并不一定固定为这种造型) 第十二届全国大学生智能汽车竞赛有一个分项是光电四轮车的竞速(任务A),Seven她们组采购到的配件使用了freescale Crotex-M4内核的CPU,T ...

  9. 【sky第二期--PID算法】--【智能车论坛】

    [sky第二期--PID算法] 想学PID的可以来[智能车论坛]这里有我发布的资料http://bbs.tekbots.eefocus.com/forum.php?mod=viewthread& ...

随机推荐

  1. DWZ (JUI) 教程 table 排序

    dwz排序是后台排序,不是前台的js排序,他的流程和搜索,分页是一样的,当你点击排序的按钮时,从新发送请求刷新当前的navTable 和 dialog. <th width="60&q ...

  2. hive操作语句使用详解

    #创建表人信息表  person(String name,int age) hive> create table person(name STRING,age INT)ROW FORMAT DE ...

  3. netbeans 优化设置

    下面我就以Windows上的NetBeans安装为例,说说如何配置字体. 1.NetBeans界面上的普通字体大小,可以通过配置NetBeans安装目录下netbeans.conf启动文件来实现,这个 ...

  4. UI4_UIWebView

    // // ViewController.m // UI4_UIWebView // // Created by zhangxueming on 15/7/7. // Copyright (c) 20 ...

  5. 20140215-搭建phonegap开发环境

    1.安装jdk,配置环境变量 a)设置 JAVA_HOME =E:\SetUpFiles\win8.1\Java\jdk1.6.0_45 b)设置PATH=E:\SetUpFiles\win8.1\J ...

  6. C++中delete[]是如何知道数组大小的

    先看一段代码: int main(void) { int *pI = new int; int *pArray = new int[10]; int size = *(pArray-1); delet ...

  7. 素数个数统计——Eratosthenes筛法 [LeetCode 204]

    1- 问题描述 Count the number of prime numbers less than a non-negative number, n 2- 算法思想 给出要筛数值的范围 $n$,找 ...

  8. 【风马一族_git_github】使用Github搭建个人网站

    个人网站 访问 https://用户名.github.io  ( 风马一族的Github网站 ) 搭建步骤 1)创建个人站点-->新建仓库(注:仓库名必须是[用户名.github.io]) 2) ...

  9. 《搭建DNS内外网的解析服务》RHEL6

    首先说下: 搭建的这个dns内外网的解析,是正向解析,反向解析自己根据正向解析把文件颠倒下就ok了 第一步我们先搭建一个DNS的正反向解析(参考上篇DNS正反向解析,这是上篇做过的) 第二部才是搭建内 ...

  10. netstat监控大量ESTABLISHED连接与Time_Wait连接问题(转载)

    问题描述: 在不考虑系统负载.CPU.内存等情况下,netstat监控大量ESTABLISHED连接与Time_Wait连接. # netstat -n | awk '/^tcp/ {++y[$NF] ...