题目链接
做法
博主的计算几何是在是太差了,只能做做这种入门题。
我们发现$n$的范围并不大,我们可以考虑对于每个圆,算出后面每个圆覆盖他的部分。
覆盖他的部分我们把弧对应到圆心角的一个区间。
加入我们现在要算圆$i$被圆$j$覆盖的圆心角的区间。
首先先特判圆$i$和圆$j$相离,以及圆$j$被圆$i$包含的情况。
如果圆$i$被圆$j$包含,那么$i$圆心角整个区间被覆盖。
我们画个图可以发现,$i$的圆心,两圆的一个交点,$j$的圆心,构成一个三角形。
用余弦定理可以算出角度,再计算两个圆心的极角,就可以把弧对应到圆心角的一段区间上了。
现在问题就变成了有一条线段,在上面覆盖一些线段,求没有被覆盖的长度。按左端点排序后扫一遍就好了。
代码
1 |
|