#P42. Cloud Retainer's Game

Cloud Retainer's Game

题目描述

青云峰云中居的建造者云留客对力学非常感兴趣。虽然距离漓江的元宵灯会还有一个多月的时间,但她已经开始设计元宵灯会的游戏活动了。

这款游戏主要是通过释放弹球来获得尽可能高的分数。游戏在二维平面上进行,平面上有两条水平直线 y=0y = 0y=Hy = H。两条直线之间有 nn 块小木板和 mm 枚硬币,两者均可视为单点。ii 个木板位于 (xi,yi)(x_i, y_i),而 ii 个硬币位于 (xi,yi)(x'_i, y'_i)

玩家从 (109,109)(10^{-9}, 10^{-9}) 释放一个弹球。假设 v=(vx,vy)\overrightarrow{v} = (v_x, v_y) 是弹球的速度(也就是说,如果弹球当前位于 (x,y)(x, y),那么它将在 ϵ\epsilon 秒后移动到 (x+vxϵ,y+vyϵ)(x + v_x\epsilon, y + v_y\epsilon)。初始值为 v=(1,1)\overrightarrow{v} = (1, 1)

当小球击中木板或两条水平直线之一时,vyv_y 将被取反(即 vyv_y 变为 vy-v_y,而 vxv_x 保持不变。如果小球击中一枚硬币,玩家的得分将增加 11,而小球的速度保持不变。

为了获得更高的分数,玩家可以选择在弹球释放前移除任意数量的木板。也可以不移除任何木板。云留客希望您帮助她估算难度,计算在最佳策略下,玩家在 101010101010^{10^{10^{10^{10}}}} 秒后能获得的最高分?

输入格式

有多个测试用例。输入的第一行包含一个整数 TT,表示测试用例的数量。对于每个测试用例:

第一行包含一个整数 HH2H1092 \le H \le 10^9)。

第二行包含一个整数 nn1n1051 \le n \le 10^5),表示木板的数量。

在接下来的 nn 行中,第 ii 行包含两个整数 xix_iyiy_i1xi1091 \le x_i \le 10^91yi<H1 \le y_i < H),表示木板位于 (xi,yi)(x_i, y_i) 处。

下面一行包含一个整数 mm1m1051 \le m \le 10^5),表示硬币的数量。

在接下来的 mm 行中,第 ii 行包含两个整数 xix'_iyiy'_i1xi1091 \le x'_i \le 10^91yi<H1 \le y'_i < H),表示一枚硬币位于 (xi,yi)(x'_i, y'_i) 处。

可以保证同一测试用例中给出的 (n+m)(n + m) 个点是不同的。同时保证所有测试用例中 nnmm 的总和都不会超过 5×1055 \times 10^5

输出格式

对每个测试用例输出一行,其中包含一个整数,表示玩家在移除一些(或不移除任何)木板后能得到的最高分。

2
4
3
1 1
2 2
6 2
4
3 1
3 3
5 1
7 3
3
1
4 2
3
1 1
6 2
9 1
3
3

解释 #1

两个测试案例示例如下。实心菱形代表剩余的木板,空心菱形代表移走的木板,圆点代表硬币。