#NC2502G. 几何,朋友

几何,朋友

题目描述

一个凸多边形懒洋洋地躺在欧几里得平面 xOy xOy 上。"拥有一个朋友是什么样的感觉呢?"它自言自语道。

一个小小的点 P P 出现在位置 (x,y) (x, y) 上,它引起了多边形的注意。它们成为了朋友,而多边形喜欢绕这个小点 P P 逆时针旋转(即以之为旋转中心),因为这样它就可以覆盖一些以前从未覆盖过的区域。如果某个点在多边形的边缘或内部,则称这个点被多边形覆盖。

但是 P P 感到担忧:有一天,多边形可能会厌倦绕着它旋转。它觉得,当多边形覆盖过的区域不再增大(也就是不再能覆盖新的点)时,多边形就会抛弃它,他们将不再是朋友。

多边形的旋转角速度为每年 11 弧度,该多边形开始旋转的时间为时间 00。请告诉 P P 什么时候多边形会不再是它的朋友,如果确实如它所想。

输入格式

每组测试包含多个测试用例。第一行包含测试用例的数量 T (1T104) T \ (1 \leq T \leq 10^4)
每个测试用例由多行组成。

第一行包含 33 个整数 $n, x, y \ (3 \leq n \leq 5 \times 10^5, |x| \leq 10^9, |y| \leq 10^9)$,其中 n n 是凸多边形的边数,(x,y) (x, y) 是点 P P 的位置。

从第二行到第 (n+1) (n+1) 行的每一行包含两个整数 xi,yi (xi109,yi109) x_i, y_i \ (|x_i| \leq 10^9, |y_i| \leq 10^9) ,表示多边形中一个顶点的位置。保证给出的顶点是按逆时针顺序排列的。

保证在单组测试中,所有测试用例的 n \sum n 不超过 5×105 5 \times 10^5

输出格式

对于每个测试用例,输出一个数值 P -P 的担忧可能成真的时刻。如果真实答案是 ans ans ,你的答案 ans ans' 只要满足 ansansmax(1,ans)106 \frac{ans-ans'}{\max(1, ans)} \leq 10^{-6} ,就会被认为是正确的。

3
4 0 0
1 0
0 1
-1 0
0 -1
3 0 0
1 0
1 -1
2 0
3 0 0
0 0
1 -1
1 1
1.570796326794897
6.283185307179586
4.712388980384690

解释 #1

  1. 第一个测试用例是一个正方形,旋转 π/2π/2 弧度(1.570796...1.570796...)后会覆盖所有四个象限,之后不再有新区域被覆盖。
  2. 第二个测试用例是一个三角形,旋转 2π 弧度(6.283185...6.283185...)后完成一个完整旋转。
  3. 第三个测试用例是一个三角形,旋转 3π/23π/2 弧度(4.712388...4.712388...)后不再有新区域被覆盖。

注意输出结果需要满足相对误差不超过 10610^-6 的精度要求。