码迷,mamicode.com
首页 > 其他好文 > 详细

Wannafly挑战赛25 B.面积并

时间:2018-09-30 20:09:47      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:out   href   ima   efi   Fix   精度   cti   coder   ble   

链接

[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.面积并

标签:out   href   ima   efi   Fix   精度   cti   coder   ble   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!