A - CF575E Spectator Riots
题意
有一个正方形,正方形的两个对角的坐标是 ( 0 , 0 ) (0,0) (0,0)和 ( 1 0 5 , 1 0 5 ) (10^5,10^5) (105,105)。
有 n n n个人,第 i i i个人初始的坐标是 ( x i , y i ) (x_i,y_i) (xi,yi),保证 x i , y i ∈ N x_i,y_i\in N xi,yi∈N且 0 ≤ x i , y i ≤ 1 0 5 0\le x_i,y_i\le 10^5 0≤xi,yi≤105。第 i i i个人的速度是 v i v_i vi,他在一秒钟后可能到达的位置是:与它的曼哈顿距离不超过 v i v_i vi、且在正方形内的所有整点。第 i i i个人一秒后到达所有他可能到达的点的概率都是相同的。
现在你需要找三个一秒钟之后可能有人会到达的点,要求这三个点不共线,然后作它们的外接圆,使一秒钟后在外接圆内的人的期望数量尽量多(边界上的也算)。如果有多种最优解,输出圆的半径最大的解。如果仍然有多种解,输出任意一个解即可。
n ≤ 1 0 5 , v i ≤ 1000 n\le 10^5,v_i \le 1000 n≤105,vi≤1000,保证所有人的初始位置不会全部在一条直线上。
Sol
考虑所有可能有人到达的点构成的点集 S S S,我们一定可以画出满足题目要求的外接圆,使得外接圆包含所有点。这是因为我们可以对 S S S求个凸包,然后再对这个凸包求Anti-Delaunay Triangulation,那么三角剖分上的三角形的外接圆都可以把 S S S中的所有点包含在内。
Lemma 1:
对于任意一个凸多边形,任取它的三个顶点作外接圆,半径最大的那个外接圆一定包含了整个多边形。
proof:
如果不是的话,我们可以外接圆半径最大的那个三角形的一条边和一个在它的外接圆外的点,得到一个外接圆半径更大的圆,就矛盾了。
Lemma 2:
对于任意一个凸多边形,任取它的三个顶点作外接圆,半径最大的那个外接圆,它的顶点一定是多边形上连续的三个顶点。
proof:
考虑某个不是由三个相邻的点构成的三角形,那么这个三角形至少有两条边,满足我们可以在这条边的异于三角形所在的这一侧找到多边形的另一个顶点。假设这个三角形的顶点是 A , B , C A,B,C A,B,C,我们在 B C BC BC异于 △ A B C \triangle ABC △ABC的一侧找到一个顶点 E E E,在 A C AC AC异于 △ A B C \triangle ABC △ABC的一侧找到一个点 D D D。
画出 △ A B C \triangle ABC △ABC的外接圆。如果 E E E或者 D D D在圆外,那么 △ A B E \triangle ABE △ABE或者 △ A B D \triangle ABD △ABD的外接圆半径一定比 △ A B C \triangle ABC △ABC大。而如果它们都在圆内,由于 ∠ A B C \angle ABC ∠ABC和 ∠ B A C \angle BAC ∠BAC至少有一个是锐角,这里我们假设 ∠ B A C \angle BAC ∠BAC是锐角,作 B E BE BE的延长线交圆于 E ′ E' E′,则 ∠ B E C , ∠ B E ′ C \angle BEC,\angle BE'C