atcoder#ABC251G. [ABC251G] Intersection of Polygons

[ABC251G] Intersection of Polygons

题目描述

xy xy -平面上の凸 N N 角形 P P の頂点が、反時計回り(x1, y1), (x2, y2), , (xN, yN) (x_1,\ y_1),\ (x_2,\ y_2),\ \ldots,\ (x_N,\ y_N) として与えられます。(ただし、x x 軸の正の方向を右向き、y y 軸の正の方向を上向きとします。)

この多角形 P P に対して、M M 個の凸 N N 多角形 P1, P2, , PM P_1,\ P_2,\ \ldots,\ P_M を考えます。
i = 1, 2, , M i\ =\ 1,\ 2,\ \ldots,\ M について多角形 Pi P_i は、 多角形 P P x x 軸の正の方向に ui u_i y y 軸の正の方向に vi v_i だけ平行移動して得られる多角形です。すなわち、Pi P_i N N 個の点 $ (x_1+u_i,\ y_1+v_i),\ (x_2+u_i,\ y_2+v_i),\ \ldots,\ (x_N+u_i,\ y_N+v_i) $ を頂点とする凸 N N 角形です。

Q Q 個の点 (a1, b1), (a2, b2), , (aQ, bQ) (a_1,\ b_1),\ (a_2,\ b_2),\ \ldots,\ (a_Q,\ b_Q) のそれぞれについて、 「その点が M M 個の多角形 P1, P2, , PM P_1,\ P_2,\ \ldots,\ P_M のすべてに含まれるか」を判定してください。

ただし、点が多角形の境界上にある場合も、その点はその多角形に含まれるとみなします。

输入格式

入力は以下の形式で標準入力から与えられる。

N N x1 x_1 y1 y_1 x2 x_2 y2 y_2 \vdots xN x_N yN y_N M M u1 u_1 v1 v_1 u2 u_2 v2 v_2 \vdots uM u_M vM v_M Q Q a1 a_1 b1 b_1 a2 a_2 b2 b_2 \vdots aQ a_Q bQ b_Q

输出格式

Q Q 行出力せよ。i = 1, 2, , Q i\ =\ 1,\ 2,\ \ldots,\ Q について、i i 行目には点 (ai, bi) (a_i,\ b_i) M M 個の多角形 P1, P2, , PM P_1,\ P_2,\ \ldots,\ P_M のすべてに含まれる場合は Yes を、そうでない場合は No を出力せよ。

题目大意

逆时针地给定一个有 NN 个顶点,第 ii 个顶点为 (xi,yi)(x_i, y_i) 的凸包 P0P_0

再给出 MM 个向量 (ui,vi)(u_i, v_i) 代表凸包 P1,P2,,PMP_1, P_2, \cdots, P_M,凸包 PjP_jNN 个顶点,第 ii 个顶点为 (xi+uj,yi+vj)(x_i + u_j, y_i + v_j)

最后有 QQ 组询问,每次给定一个点 (ai,bi)(a_i, b_i),要求判断这个点是否在每一个凸包的内部。

注意凸包的边上也算是它的内部。

5
-2 -3
0 -2
1 0
0 2
-2 1
2
0 1
1 0
6
0 0
1 0
0 1
1 1
-1 -1
-1 -2
Yes
No
Yes
Yes
Yes
No
10
45 100
-60 98
-95 62
-95 28
-78 -41
-54 -92
-8 -99
87 -94
98 23
87 91
5
-57 -40
-21 -67
25 39
-30 25
39 -20
16
4 5
-34 -8
-63 53
78 84
19 -16
64 9
-13 7
13 53
-20 4
2 -7
3 18
-12 10
-69 -93
2 9
27 64
-92 -100
Yes
Yes
No
No
Yes
No
Yes
No
Yes
Yes
Yes
Yes
No
Yes
No
No

提示

制約

  • 3  N  50 3\ \leq\ N\ \leq\ 50
  • 1  M  2 × 105 1\ \leq\ M\ \leq\ 2\ \times\ 10^5
  • 1  Q  2 × 105 1\ \leq\ Q\ \leq\ 2\ \times\ 10^5
  • 108  xi, yi  108 -10^8\ \leq\ x_i,\ y_i\ \leq\ 10^8
  • 108  ui, vi  108 -10^8\ \leq\ u_i,\ v_i\ \leq\ 10^8
  • 108  ai, bi  108 -10^8\ \leq\ a_i,\ b_i\ \leq\ 10^8
  • 入力はすべて整数
  • (x1, y1), (x2, y2), , (xN, yN) (x_1,\ y_1),\ (x_2,\ y_2),\ \ldots,\ (x_N,\ y_N) は反時計回りに凸多角形をなす
  • 多角形 P P のそれぞれの内角の大きさは 180 180 度未満

Sample Explanation 1

多角形 P P は $ (-2,\ -3),\ (0,\ -2),\ (1,\ 0),\ (0,\ 2),\ (-2,\ 1) $ を頂点とする 5 5 角形です。 - 多角形 P1 P_1 は、P P x x 軸の正の方向に 0 0 y y 軸の正の方向に 1 1 だけ平行移動させた、$ (-2,\ -2),\ (0,\ -1),\ (1,\ 1),\ (0,\ 3),\ (-2,\ 2) $ を頂点とする 5 5 角形です。 - 多角形 P2 P_2 は、P P x x 軸の正の方向に 1 1 y y 軸の正の方向に 0 0 だけ平行移動させた、$ (-1,\ -3),\ (1,\ -2),\ (2,\ 0),\ (1,\ 2),\ (-1,\ 1) $ を頂点とする 5 5 角形です。 よって、下記の通りに 6 6 行出力します。 - (a1, b1) = (0, 0) (a_1,\ b_1)\ =\ (0,\ 0) P1 P_1 P2 P_2 の両方に含まれるので、1 1 行目には Yes を出力します。 - (a2, b2) = (1, 0) (a_2,\ b_2)\ =\ (1,\ 0) P2 P_2 には含まれますが P1 P_1 には含まれないので、2 2 行目には No を出力します。 - (a3, b3) = (0, 1) (a_3,\ b_3)\ =\ (0,\ 1) P1 P_1 P2 P_2 の両方に含まれるので、3 3 行目には Yes を出力します。 - (a4, b4) = (1, 1) (a_4,\ b_4)\ =\ (1,\ 1) P1 P_1 P2 P_2 の両方に含まれるので、4 4 行目には Yes を出力します。 - (a5, b5) = (1, 1) (a_5,\ b_5)\ =\ (-1,\ -1) P1 P_1 P2 P_2 の両方に含まれるので、5 5 行目には Yes を出力します。 - (a6, b6) = (1, 2) (a_6,\ b_6)\ =\ (-1,\ -2) P2 P_2 には含まれますが P1 P_1 には含まれないので、6 6 行目には No を出力します。 多角形の境界上にある点も多角形に含まれるとみなすことに注意してください。 ![](https://img.atcoder.jp/abc251/8216bd194340d2648ce000e9ac9a203e.png)