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!
  • 相关阅读:
    代理模式
    装饰模式
    策略模式
    简单工厂模式
    linux下进程相关操作
    散列表(哈希表)
    转载:最小生成树-Prim算法和Kruskal算法
    二叉排序树和平衡二叉树
    堆排序
    快速排序
  • 原文地址:https://www.cnblogs.com/qywhy/p/9728871.html
Copyright © 2011-2022 走看看