在去年的马拉喀什 ACM ICPC 全球总决赛期间,一位评委买了一个漂亮的木制拼图,上面描绘着骆驼和棕榈树(见图 H.1)。与通常通过切割现有矩形图片制作的传统拼图不同,这个拼图的所有碎片都是单独切割和上色的。因此,相邻的碎片通常不共享共同的图片元素或颜色。此外,拼图本身是不规则形状的。鉴于这些特性,单个碎片的形状通常是判断每个碎片应放置位置的唯一依据。
图 H.1:评委的木制拼图。
自去年以来,这位评委一直想知道是否可以编写一个程序来解决这个拼图。此类程序的一个重要部分是评估两个拼图碎片如何“匹配”的方法。匹配度越高,这些碎片在拼图中相邻的可能性就越大。
碎片被建模为简单多边形。你的任务是找到两个给定多边形的放置方式,使得它们的内部不重叠,但多边形的边界相互接触,且公共边界的长度最大化。对于这种放置,多边形可以平移和旋转,但不能翻转或缩放。图 H.2 展示了样例输入 1 的最优放置方式。
输入格式
输入包含两个多边形的描述,一个接一个。每个多边形描述以一行包含一个整数 $n$ ($3 \le n \le 50$) 开始,表示多边形的顶点数。随后是 $n$ 行,每行包含多边形顶点的两个整数坐标 $x, y$ ($|x|, |y| \le 100$)。每个多边形的顶点按顺时针顺序给出,且没有三个连续顶点共线。
输入数据经过选择,即使顶点移动距离不超过 $10^{-7}$,答案的变化也不会超过 $10^{-4}$。
图 H.2:样例输入 1 及其最优放置方式。
输出格式
显示这两个多边形在最优放置时公共边界的最大可能长度。你的答案应具有小于 $10^{-3}$ 的绝对或相对误差。
样例
样例输入 1
8 0 0 0 10 10 10 15 15 24 6 24 10 30 10 30 0 7 -5 0 -5 10 10 10 15 5 20 10 35 10 35 0
样例输出 1
30.142135624
样例输入 2
3 1 0 0 30 40 0 3 1 0 0 30 40 0
样例输出 2
50