NC19466. 面积并
描述
输入描述
输入三个整数n,l,r。
3<=n<=100000000
1<=l<=1000000
0<=r<=1000000
输出描述
输出一个实数,保留2位小数,表示面积并。
示例1
输入:
8 7 6
输出:
138.59
C++14(g++5.4) 解法, 执行用时: 5ms, 内存消耗: 492K, 提交时间: 2018-09-29 19:25:10
#include<bits/stdc++.h> using namespace std; const double PI=acos(-1); int main(){ double n,l,r; while(~scanf("%lf%lf%lf",&n,&l,&r)){ double h=l*cos(PI/n); double ans; if(r<h)ans=0.5*sin(2*PI/n)*n*l*l; else if(r>l)ans=PI*r*r; else{ double sita=acos(h/r); ans=(sita*r*r-h*sqrt(r*r-h*h))*n+0.5*sin(2*PI/n)*n*l*l; } printf("%.2f\n",ans); } }
C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 600K, 提交时间: 2020-02-27 21:06:42
#include<bits/stdc++.h> using namespace std; long double al,s,h,n,l,r,pi=acos(-1); int main() { cin>>n>>l>>r; if(r>=l) { printf("%.2Lf",pi*r*r); return 0; } h=l*cos(pi/n); if(r<=h) printf("%.2Lf",l*sin(pi/n)*h*n); else { al=acos(h/r); s=al*r*r-r*h*sin(al); printf("%.2Lf",(l*sin(pi/n)*h+s)*n); } }