[ABC286Ex] Don’t Swim
题意翻译
在二维平面上,有一个 $N$ 个顶点的凸多边形 $C$,和两个点 $S=(s_x,s_y),T=(t_x,t_y)$,$C$ 的顶点按顺时针方向依次是 $(x_1,y_1),(x_2,y_2),\dots,(x_N,y_N)$,$S$ 和 $T$ 在多边形 $C$ 的外面。
求出从 $S$ 到 $T$ 的不进入 $C$ **内部**(可以与其相切)的最短路的长度。
题目描述
[problemUrl]: https://atcoder.jp/contests/abc286/tasks/abc286_h
二次元平面上に $ N $ 頂点の凸多角形 $ C $ 、点 $ S=(s_x,\ s_y),\ T=(t_x,t_y) $ があります。 $ C $ の頂点は、反時計回りに $ (x_1,y_1),(x_2,y_2),\ldots,(x_N,y_N) $ です。 $ S,T $ は $ C $ の外部にあることが保証されています。
$ C $ の外周を除いた内部を通らずに点 $ S $ から点 $ T $ まで移動するときの最短距離を求めてください。
输入输出格式
输入格式
入力は以下の形式で標準入力から与えられる。
> $ N $ $ x_1 $ $ y_1 $ $ x_2 $ $ y_2 $ $ \vdots $ $ x_N $ $ y_N $ $ s_x $ $ s_y $ $ t_x $ $ t_y $
输出格式
答えを出力せよ。
なお、真の値との絶対誤差または相対誤差が $ 10^{-6} $ 以下であれば正解として扱われる。
输入输出样例
输入样例 #1
4
1 1
3 1
3 3
1 3
0 2
5 2
输出样例 #1
5.65028153987288474496
输入样例 #2
3
0 0
2 0
1 10
3 7
10 3
输出样例 #2
8.06225774829854965279
说明
### 制約
- $ 3\leq\ N\ \leq\ 10^5 $
- $ |x_i|,|y_i|,|s_x|,|s_y|,|t_x|,|t_y|\leq\ 10^9 $
- $ (x_1,y_1),(x_2,y_2),\ldots,(x_N,y_N) $ は反時計回りに凸多角形をなす
- $ C $ のどの $ 3 $ 点も同一直線上にない
- $ S,T $ は $ C $ の外部に存在し、$ C $ の外周上にない
- 入力は全て整数
### Sample Explanation 1
最短距離を達成する移動方法の一例を以下の図で示します。 !\[image\](https://img.atcoder.jp/abc286/4affd3de612079930dd393002bbae832.png) $ (0,2)\ \to\ (1,3)\ \to(3,3)\to(5,2) $ と移動すると、点 $ S $ から点 $ T $ への移動距離が $ 5.650281... $ となり、これが最小であることが証明できます。 $ C $ の外周上は通れることに注意してください。 なお、絶対誤差または相対誤差が $ 10^{-6} $ 以下であれば正解として扱われるので、`5.650287` などと出力しても正解と判定されます。