题目名称 1700. [NWERC2007]飞行安全
输入输出 flightsafety.in/out
难度等级 ★★★★
时间限制 1000 ms (1 s)
内存限制 256 MiB
测试数据 2
题目来源 Gravatarcstdio 于2014-09-09加入
开放分组 全部用户
提交状态
分类标签
二分法 计算几何
分享题解
通过:5, 提交:24, 通过率:20.83%
Gravatar神利·代目 100 0.091 s 31.02 MiB C++
Gravatarstdafx.h 100 0.093 s 0.32 MiB C++
Gravatar天一阁 100 0.281 s 0.37 MiB C++
GravatarsssSSSay 100 1.560 s 4.12 MiB C++
Gravatarcstdio 100 1.611 s 3.87 MiB C++
Gravatarstdafx.h 50 0.045 s 0.32 MiB C++
GravatarsssSSSay 50 0.124 s 0.55 MiB C++
GravatarsssSSSay 50 0.185 s 2.71 MiB C++
GravatarsssSSSay 50 0.193 s 1.08 MiB C++
GravatarsssSSSay 50 0.199 s 1.08 MiB C++
关于 飞行安全 的近10条评论(全部评论)
ORZ真不容易
GravatarsssSSSay
2017-03-11 06:11 3楼
wwww,不做死就不会死
Gravatar天一阁
2015-01-12 19:47 2楼
写了一天,晚上发现算法错了,又写了一晚上……
我的方法是用参数方程表示线段,这样可以方便地求解线段与线段/圆的交点并判断交点是否在线上。代价是较高精度误差。flightsafety2.in中的第11组数据有路径经过多边形某个端点的情况,读入时将路径点抖动一个eps即可解决
Gravatarcstdio
2014-09-09 22:05 1楼

1700. [NWERC2007]飞行安全

★★★★   输入文件:flightsafety.in   输出文件:flightsafety.out   评测插件
时间限制:1 s   内存限制:256 MiB

【题目描述】

在规划客机航线时安全是一个重要的问题。首先,显然应当采取任何可能的措施来确保旅途平安无事。但即使那样,也应当时刻为最坏的情况做好准备,设法确保即使事故发生,乘客的生还概率也尽可能高。

当飞机在水面迫降时,到最近陆地的距离是一个关键因素。一般而言,在开阔水面上离岸边越远,生还的希望就越小。因此,航班一个重要的安全系数就是航线上任意位置到最近陆地的距离。你的任务是写一个程序,对给定的航线计算这个距离。

为了简化问题,我们将世界视作一个二维平面而非球体。我们将陆地视作多边形,将航线视作由直线段连接的一系列路径点。航线的起点和终点总是严格地处于一块陆地内部,但中间的路径点可能在水面上。陆地的边界不会自交,陆地之间也不会相交。

【输入格式】

第一行有一个正整数,代表数据组数(<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

【提示】

第二组样例如图。最远点用方块标记。

【来源】

NWERC 2007 Problem F Flight Safety