题解 | #面积并#
面积并
https://ac.nowcoder.com/acm/problem/19466
using namespace std;
const int N = 1010;
//根据数学知识,反余弦函数的-1为Π的取值
const long double Pi = acos(-1);
//这里要开long doule
typedef long double ll;
int main()
{
ll n, r, l;
cin >> n >> l >> r;
//先计算将正多边形中心到一条边的距离,也就是三角形的一条高
ll h = l * cos(Pi / n);
ll sum;
//第一种情况,代表是一个正多边形内接了一个圆
if (h >= r)
{
sum = n * h * l * sin(Pi / n);
}
//第二种情况,代表是一个正多边形被套在圆里面
else if (r >= l)
{
sum = Pi * r * r;
}
//最后一种情况是代表他们之间有交集
else
{
//反三角函数,求内小三角形的角度
ll s = acos(h / r);
//用正方形面积加上扇形部分多出来的那一块面积,就是其并集
sum = n * h * l * sin(Pi / n) + n * (s * r * r - r * h * sin(s));
}
printf("%.2Lf", sum);
return 0;
}
``` js