zoukankan      html  css  js  c++  java
  • Wannafly挑战赛25 B 面积并 数学

    题面

    题意:有一个正n边形,它的外接圆的圆心位于原点,半径为l .以原点为圆心,r为半径作一个圆,求圆和这个正n边形的面积并。3<=n<=1e8  1<=l<=1e6 0<=r<=1e6

    题解: r>=l  时 显然是大圆面积

             r<=h 时 h是正n边形,每个小等腰三角形的高,h=l*cos(pi/n),(结合n边形的边长和正弦公式推下就可以了),答案显然是正n边形 (S=l*sin(pi/n)*h   *n,也就是每个小的等腰三角形面积 *n)

             不然图形就是正n边形每段冒出来一个小圆弧围成的面积,这个面积就用扇形面积-那块三角形的面积就可以了

             另注意n是1e8 l,r是1e6 n*l*r可以有1e20了 加上小数位,double 已经要不够了

             记得用 long double 和%LF输出 而不是%lf

     1 #include <bits/stdc++.h>
     2 #define ld long double
     3 using namespace std;
     4 long double S,al,s,h,n,l,r,pi=acos(-1);
     5 int main()
     6 {
     7     cin>>n>>l>>r;
     8     if (r>=l) 
     9     {
    10         printf("%.2Lf",pi*r*r);    
    11         return 0;
    12     }
    13     h=l*cos(pi/n);
    14     S=l*sin(pi/n)*h;
    15     if (r<=h) printf("%.2Lf",S*n);
    16     else
    17     { 
    18         al=acos(h/r); 
    19         s=al*r*r-r*h*sin(al);
    20         printf("%.2Lf",(S+s)*n);
    21     }
    22 }
    Anderyi!
  • 相关阅读:
    原创 计算机系学生大学四年应该这样过
    ff3f34fq34f
    指针 引用
    POJ3352Road Construction
    POJ3308Paratroopers
    北大ACM试题分类 实时更新我所有的解题报告链接
    POJ2516Minimum Cost
    【转】一位ACMer过来人的心得
    POJ2528Mayor's posters
    POJ2186Popular Cows
  • 原文地址:https://www.cnblogs.com/qywhy/p/9728871.html
Copyright © 2011-2022 走看看