题意
命数为织,当为磐石!
—塔莉垭,“岩雀”
命运的纹路交织错落。我却磐石那般坚定不移。
岩雀的一次 Q Q Q·石穿 可以被理解在平面上画一个圆,圆的解析式是 ( x − x i ) 2 + ( y − y i ) 2 = r i 2 (x-x_i)^2+(y-y_i)^2=r_i^2 (x−xi)2+(y−yi)2=ri2。其中 ∣ x i ∣ , ∣ y i ∣ ≤ 1 0 9 , 0 < r i ≤ 1 0 9 |x_i|,|y_i| \le 10^9,0<r_i \le 10^9 ∣xi∣,∣yi∣≤109,0<ri≤109。
然而,一次合法的Q·石穿要求不能和任何一个别的Q·石穿相交(有两个交点),内切,内含。
美团、高哥很牛进行了 2 ≤ n ≤ 5 × 1 0 5 2 \le n \le 5 \times 10^5 2≤n≤5×105 次合法的 Q·石穿。我们说,一个下饭是一个无序二元组,里面是两个标号不同的Q·石穿,使得这两个圆外切。如果你不知道外切是什么意思,你可以咨询你的初中数学老师。
我的问题是,他总共打了多少个不同的下饭操作?
子任务特征 | 分值 | n ≤ n \le n≤ |
---|---|---|
无 | 10 | 5000 |
保证答案 ≤ n \le n ≤n | 10 | 80000 |
坐标范围 − 1000 ≤ x i , y i ≤ 1000 -1000 \le x_i,y_i \le 1000 −1000≤xi,yi≤1000 | 15 | 100000 |
只存在两种圆, ( 10 a , 6 b ) , r i = 3 (10a,6b),r_i=3 (10a,6b),ri=3 和 ( 10 a + 4 , 6 b + 3 ) , r i = 2 (10a+4,6b+3),r_i=2 (10a+4,6b+3),ri=2 | 25 | 500000 |
无 | 40 | 500000 |
题解
由于保证圆之间没有交,如果把相切的两个圆连边,那么形成一个平面图,故相切的圆数不会很多,是 O ( n ) O(n) O(n)级别的。
于是考虑一个个找出相切的圆,但 x x x和 y y y坐标难以同时考虑;又注意到如果两个圆相切,那么在切点处垂直 x x x轴的直线上 l l l,两个圆截得的圆弧端点相邻,即所有与这条直线相交的圆心中,这两个圆圆心的 y y y坐标相邻。
于是把这条直线 l l l从左到右扫一遍,加入或删除圆心,同时查看相邻的两个圆是否相切(这样相当于把所有情况的 l l l枚举一边)。但这样可能两个相切的圆在加入和删除时同时被算到,用 m a p map map去重即可。