题目
给定2个内切的大圆,半径分别为$R_1,R_2$,按下图顺序依次画上相切的小圆,问前$N$个小圆的面积是多少。
数据范围
$Case=1200\quad 1\leq N \leq 10^7$
做法
反演,推公式,便可$O(1)$得到每个小圆的半径。
但题目有1200个Case,每个Case要算最多$10^7$个小圆半径,直接算会超时。
发现:小圆半径递减得很快,而且题目只要求$10^5$的精度,于是每个Case不需要把$N$个全都算出来,后面的在当前精度下对答案不产生影响就不用算了。不产生影响的必要条件是:把当前圆的面积当作后面每个圆的面积,求和,若都不对答案产生影响,则后面的圆就不用算了。
代码
|
|
注意
- 特判2个半径相等的情况,此时输出不是0,是0.00000