P6945 [ICPC 2018 WF] Getting a Jump on Crime

题目描述

你的朋友罗宾(Robin)是一位超级英雄。当你第一次发现这个事时,你认为“每个人都需要有爱好,这个看起来比收集邮票有意思多了”,但是现在你十分感谢那些在你的家乡胡作非为的人。 每个晚上, 罗宾(Robin)用在房顶上跳跃的方式巡逻整座城市,并且看下面发生了什么。自然,超级英雄需要立即应对危机,所以罗宾(Robin)寻求你的帮助,帮他找出如何迅速走遍你的家乡。 你的家乡建立在一个方形的格子上,其中每个区块有 $w\times w$ 米。每个区块是一个独立的建筑,建筑有可能有不同的高度,为了从一个建筑到另一个(不一定相邻的)建筑,罗宾(Robin)从第一个房屋屋顶的中间跳到第二个房屋屋顶的中间。不能在空中改变方向,但可以选择起飞的角度。 当然,罗宾(Robin)不想撞到任何一个建筑。一些碰撞很难对超级英雄造成伤害,但是当有人击穿房屋主人的窗户时,他们容易感到生气。你向罗宾(Robin)解释物理学:“你的每次跳都有一个初速度$v$,可以被分解成一个向前的水平分力$v_d$和一个向上的竖直分力$v_h$,且$v_{d}^{2} + v_{h}^{2} = v^{2}$.当你行动时,你的水平分力保持不变$(v_{dt} = v_{d}),$,但是竖直分力受到重力的影响$(v_{h}(t) = v_{h} − t · g)$,设在你的家乡重力加速度$g=9.80665$。自然,你的斗篷可以让你忽略空气阻力的影响。这可以让你确定你的飞行路线和……”这是你注意到罗宾(Robin)已经睡着了-少一点数学,多一点超级英雄! 所以现在轮到你了:已经给出城市的布局和罗宾(Robin)秘密藏身处的位置,你需要确定罗宾(Robin)能到达哪些屋顶并给出最少跳跃次数。 请注意,如果罗宾(Robin)的跳跃经过一栋建筑的角落(四栋建筑交汇的地方),那么跳跃需要比所有四栋相邻建筑都高。

输入格式

输入的第一行包含六个整数$d_x$,$d_y$,$w$,$v$,$l_x$,$l_x$.这些代表了 $d_x\times d_y$ 的城市面积(单位:区块)$(1 \le d_{x}, d_{y} \le 20)$,每座建筑的宽度$(1 \le w \le 10^{3})$,罗宾(Robin)的起跳速度$(1 \le v \le 10^{3})$(单位:米每秒),和罗宾(Robin)藏身处的坐标$(1 \le ℓ_{x} \le d_{x}, 1 \le ℓ_{y} \le d_{y}).$。 第一行后面是对城市网格中建筑高度的描述。描述由$d_y$行组成,每个行包含$d_{x}$个非负整数。第j行包含建筑物$(1 , j),(2 , j)$ , . . . $,(d_{x}, j)$ 的高度(单位:米)。高度最高不超过$10^3$米。

输出格式

输出罗宾从秘密藏身处跳到每栋建筑屋顶所需的最小跳跃次数。如果无法到达建筑物的屋顶,则显示$X$而不是跳跃次数。按输入文件中给定的顺序显示建筑,分为$d_{y}$行,每行包含$d_{x}$个值。

说明/提示

Time limit: 2 s, Memory limit: 1024 MB.