链接

思路:分为三种情况,第一种是圆的半径大于外接圆的半径,第二种是圆的半径小于内接圆的半径,第三种是圆的半径在两圆之间。前两种很好计算,第三种需要求出正多边形的面积,加上多出来的n个弓形的面积,需要开long double。

#include <bits/stdc++.h>
  
#define double long double
using namespace std;
double n,l,r;
const double pi=acos(-1.0);
int main()
{
    scanf("%Lf %Lf %Lf",&n,&l,&r);
    double ang=pi/n;
    if(r>l){
        printf("%.2Lf",pow(r,2)*pi);
    }
    else{
        if(r<=l*cos(ang)){
            printf("%.2Lf",n*pow(l,2)*sin(ang)*cos(ang));
        }
        else{
            double th=2*acos(l*cos(ang)/r);
            printf("%.2Lf",n*pow(l,2)*sin(ang)*cos(ang)+n*0.5*r*r*(th-sin(th)));
        }
    }
}