首页 > 其他 > 详细

Wannafly挑战赛25 B.面积并

时间:2018-09-30 19:42:19      阅读:200      评论:0      收藏:0      [点我收藏+]

链接

[https://www.nowcoder.com/acm/contest/197/B]

分析

特殊优先考虑
首先考虑r>=l这种情况就是圆的面积了
第二就是r<=内切圆的半径,这个直接是n多边形的面积了
第三种就是介于上面二者之间了
关键就是怎么求弓形的面积,也就是扇形面积减去三角形面积了
技术分享图片
先求出CO和CD
后面就好办了
注意这里的扇形公式S扇=(夹角/360)πR2 化简 π和360约分得到二分之一,二分之一夹角正是<DOC,这里是关键
看代码吧
对特别注意精度用long double

#include<bits/stdc++.h>
using namespace std;
#define pi acos(-1.0)
int main() {
    
    long double n, l, r;
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    cin >> n >> l >> r;
    
    long double h = l*cos(pi/n);//CO 也就是内切圆半径 
    long double d = sqrt(l*l - h*h);//勾股定理求CD,底的一半 
    long double ans = 0.5*sin(2*pi/n)*l*l;//把正多边形分角成n个三角形的面积 
    if(r >=l) ans = pi*r*r;//第一种 
    else if (r<=h) ans*=n;//第二种 
    else {
        long double DOC=acos(h/r); //这里很关键,计算角DOC
        //这时候扇形面积就可以根据公式化简了 
        long double dd=sqrt(r*r - h*h);
        ans+=DOC*r*r - dd*h;//扇形-三角形,因为dd是底的一半不用除二 
        ans*=n;
    }
    
    cout << fixed << setprecision(2) << ans << endl;
    return 0;
}

Wannafly挑战赛25 B.面积并

原文:https://www.cnblogs.com/mch5201314/p/9733020.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!