#P17009. [SGU500] Circular Island

[SGU500] Circular Island

题目描述

有一座半径为 rr、圆心位于 (0,0)(0,0) 的圆形岛屿。岛上居住着两个部落:Java 和 Seeplusplus。两个部落领地之间的边界是一条直线。

你知道若干个 Java 村庄与 Seeplusplus 村庄的坐标。每个村庄都必须位于所属部落的领地内或边界上,并保证至少存在一条直线能够把两个部落的所有已知村庄分隔开。

对于所有满足条件的分界直线,求 Java 部落领地面积可能取得的最小值和最大值。

输入格式

第一行一个整数 rr,表示岛屿半径,1r1091\le r\le10^9

第二行一个整数 nn,表示 Java 村庄数量,1n500001\le n\le50000

接下来 nn 行,每行两个整数 x,yx,y,表示一个 Java 村庄的坐标。

随后一行一个整数 mm,表示 Seeplusplus 村庄数量,1m500001\le m\le50000

接下来 mm 行,每行两个整数 x,yx,y,表示一个 Seeplusplus 村庄的坐标。

所有村庄都在圆内,并且到圆周的距离至少为 r/10r/10;任意两个村庄坐标不同。保证输入合法,即至少存在一条直线能分隔两类村庄。

输出格式

输出两个实数,以空格分隔,依次表示 Java 领地面积的最小值与最大值。

若相对误差不超过 10610^{-6},则认为正确。

样例

6
2
3 4
-3 4
1
0 0
12.389928320447176 56.548667764616276