#ATagc019c. [AGC019C] Fountain Walk

[AGC019C] Fountain Walk

题目描述

都市 Nevermore 有 10810^8 条东西向的街道和 10810^8 条南北向的街道,所有街道都标号为 00108110^8-1。任意相邻两条东西向街道间的距离恰好为 100100 米,任意相邻两条南北向街道间的距离也恰好为 100100 米。

所有东西向街道与所有南北向街道都相互交叉。每个交叉点可用其所在的南北向街道编号 xx 和东西向街道编号 yy 来表示,记为点 (x, y)(x,\ y)

该城市内有 NN 个喷泉,分别设置在交叉点 (Xi, Yi)(X_i,\ Y_i)。与普通的交叉点不同,这些交叉点上以交点为圆心画有半径为 1010 米的圆,作为喷泉的外周,圆内没有道路。

下图显示了城市一角的街道和喷泉的示例场景:

1f931bf0c98ec6f07e612b0282cdb094.png

市长们决定,在同一条街道上行走时不希望多次经过喷泉。因此,任意一条东西向街道上至多只会有一个喷泉,南北向街道也是如此。

市民只能在东西向、南北向的街道及喷泉的外周上通行。请计算从交叉点 (x1, y1)(x_1,\ y_1) 移动到 (x2, y2)(x_2,\ y_2) 所需步行的最短距离(单位:米)。

输入格式

输入以如下格式从标准输入读入。

x1x_1 y1y_1 x2x_2 y2y_2 NN X1X_1 Y1Y_1 X2X_2 Y2Y_2 :: XNX_N YNY_N

输出格式

输出从交叉点 (x1, y1)(x_1,\ y_1) 移动到 (x2, y2)(x_2,\ y_2) 所需步行的最短距离(单位为米)。若输出的绝对误差或相对误差不超过 101110^{-11},即可被认为是正确答案。

样例 1

输入

1 1 6 5
3
3 2
5 3
2 4

输出

891.415926535897938

样例 2

输入

3 5 6 4
3
3 2
5 3
2 4

输出

400.000000000000000

样例 3

输入

4 2 2 2
3
3 2
5 3
2 4

输出

211.415926535897938

说明/提示

限制条件

  • 0x1,y1,x2,y2<1080 \leq x_1, y_1, x_2, y_2 < 10^8
  • 1N200, ⁣0001 \leq N \leq 200,\!000
  • 0Xi,Yi<1080 \leq X_i, Y_i < 10^8
  • iji \neq jXiXjX_i \neq X_j
  • iji \neq jYiYjY_i \neq Y_j
  • (x1,y1)(x_1, y_1)(x2,y2)(x_2, y_2) 不相同,且这些点上没有喷泉。
  • 所有输入为整数。

样例解释 1

下图给出了其中一条最短路径。起点为蓝点,终点为紫点,红线为途中路径。 c49e52b9b79003f61b8a6efa5dad8ba3.png

样例解释 2

f9090ab734c89424c413f3b583376990.png

样例解释 3

4b76416161f27cad20333a9ac636e00f.png

由 ChatGPT 5 翻译