题目名称 | 1700. [NWERC2007]飞行安全 |
---|---|
输入输出 | flightsafety.in/out |
难度等级 | ★★★★ |
时间限制 | 1000 ms (1 s) |
内存限制 | 256 MiB |
测试数据 | 2 |
题目来源 | cstdio 于2014-09-09加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:5, 提交:24, 通过率:20.83% | ||||
神利·代目 | 100 | 0.091 s | 31.02 MiB | C++ |
stdafx.h | 100 | 0.093 s | 0.32 MiB | C++ |
天一阁 | 100 | 0.281 s | 0.37 MiB | C++ |
sssSSSay | 100 | 1.560 s | 4.12 MiB | C++ |
cstdio | 100 | 1.611 s | 3.87 MiB | C++ |
stdafx.h | 50 | 0.045 s | 0.32 MiB | C++ |
sssSSSay | 50 | 0.124 s | 0.55 MiB | C++ |
sssSSSay | 50 | 0.185 s | 2.71 MiB | C++ |
sssSSSay | 50 | 0.193 s | 1.08 MiB | C++ |
sssSSSay | 50 | 0.199 s | 1.08 MiB | C++ |
关于 飞行安全 的近10条评论(全部评论) | ||||
---|---|---|---|---|
ORZ真不容易
| ||||
wwww,不做死就不会死
天一阁
2015-01-12 19:47
2楼
| ||||
写了一天,晚上发现算法错了,又写了一晚上……
我的方法是用参数方程表示线段,这样可以方便地求解线段与线段/圆的交点并判断交点是否在线上。代价是较高精度误差。flightsafety2.in中的第11组数据有路径经过多边形某个端点的情况,读入时将路径点抖动一个eps即可解决 |
在规划客机航线时安全是一个重要的问题。首先,显然应当采取任何可能的措施来确保旅途平安无事。但即使那样,也应当时刻为最坏的情况做好准备,设法确保即使事故发生,乘客的生还概率也尽可能高。
当飞机在水面迫降时,到最近陆地的距离是一个关键因素。一般而言,在开阔水面上离岸边越远,生还的希望就越小。因此,航班一个重要的安全系数就是航线上任意位置到最近陆地的距离。你的任务是写一个程序,对给定的航线计算这个距离。
为了简化问题,我们将世界视作一个二维平面而非球体。我们将陆地视作多边形,将航线视作由直线段连接的一系列路径点。航线的起点和终点总是严格地处于一块陆地内部,但中间的路径点可能在水面上。陆地的边界不会自交,陆地之间也不会相交。
第一行有一个正整数,代表数据组数(<20)。每组数据格式如下:
第一行包含两个整数C(1<=C<=20)和N(2<=N<=20),C是陆地数量,N是路径点数量。
接下来有N行,每行两个整数X,Y,按照航线顺序给出了N个路径点的坐标。
接下来是对于C块陆地的描述。格式如下:
第一行有一个整数M(3<=M<=30),代表顶点数。接下来M行每行有一对整数X,Y,按照顺时针或逆时针顺序给出了M个顶点的坐标。
所有坐标范围[-10000,10000]。
对每组数据输出一行一个实数,代表航线离最近陆地最远处到最近陆地的距离。精确到小数点后六位。
当且仅当你的输出和标准输出之差的绝对值不超过10^-3时我们认为你的答案正确。
2
1 2
-9 -6
5 1
3
0 16
-16 -12
17 -6
2 3
12 4
16 17
3 9
4
1 0
4 19
19 14
6 12
3
10 10
5 3
18 2
0.000000
2.942685
第二组样例如图。最远点用方块标记。