2021春季个人赛-5 补题

M.长安街的华灯

题意: 给定 n n n个圆和他们的距离 L L L,半径 R R R,求圆形区域的面积并。
分析:
在这里插入图片描述
如果 L ≥ 2 R L\ge2R L2R,求出 n n n个圆的面积即为答案。
如果 L < 2 R L<2R L<2R,求出 n n n个圆的面积减去 n − 1 n-1 n1个两个圆相交的面积即为答案。
如图,底部蓝色线段长度为 L 2 \frac{L}{2} 2L,粉色线段长度为 R 2 − L 2 4 \sqrt{R^2-\frac{L^2}{4}} R24L2 ,所以红色三角形的面积为 L R 2 − L 2 4 2 \frac{L\sqrt{R^2-\frac{L^2}{4}}}{2} 2LR24L2 c o s α = L 2 R cos\alpha=\frac{L}{2R} cosα=2RL,所以 α = a r c c o s L 2 R \alpha=arccos\frac{L}{2R} α=arccos2RL,扇形面积为 α R 2 = R 2 a r c c o s L 2 R \alpha R^2=R^2arccos\frac{L}{2R} αR2=R2arccos2RL,相减乘 2 2 2就是两圆相交面积了。
最终答案为 n π R 2 − ( n − 1 ) ( 2 R 2 a r c c o s L 2 R − L R 2 − L 2 4 ) n\pi R^2-(n-1)(2R^2arccos\frac{L}{2R}-L\sqrt{R^2-\frac{L^2}{4}}) nπR2(n1)(2R2arccos2RLLR24L2 )
最后注意特判一下就好。

代码:

#include<stdio.h>
#include<math.h>
const double pi=3.141592653;
int t;
double n,r,l;
int main(){
    
    
    scanf("%d",&t);
    while(t--){
    
    
        scanf("%lf%lf%lf",&n,&r,&l);
        if(n==0||r==0) printf("0\n");
        else if(l==0||n==1) printf("%.6lf\n",pi*r*r);
        else if(l>=2*r) printf("%.6lf\n",n*pi*r*r);
        else printf("%.6lf\n",n*pi*r*r-(n-1)*(2*r*r*acos(l/(2*r))-l*sqrt(r*r-l*l/4)));
    }
}

猜你喜欢

转载自blog.csdn.net/messywind/article/details/114763168