The 2016 ACM-ICPC Asia Dalian Regional Contest
阿新 • • 發佈:2018-12-13
題意:有N個點與原點的距離都是D,那麼將這N個點分別於原點連線得N條線段,現在給出N條線段所有相鄰夾角a1~aN,問N個點組成的凸多邊形的面積是多少。
解析:這個題目很坑,如果用餘弦定理求出三角形的邊長,再用海倫公式就是WrongAnswer,可能是精度不夠。換成用公式S=1/2*a*b*Sin(c)就能過。
程式碼(0ms):
#include <bits/stdc++.h> using namespace std; const double PI=acos(-1.0); double angle(double x)//角度轉弧度 { return (x*PI/180.0); } int N,DD; double aa; int main() { while(cin>>N>>DD) { double ans=0,D=1.0*DD; for(int i=1;i<=N;i++) { cin>>aa; double ta=D*D*sin(angle(aa))/2; ans+=ta; } cout<<fixed<<setprecision(3)<<ans<<endl; } return 0; }
餘弦公式的WongAnswer程式碼:
#include <bits/stdc++.h> using namespace std; const double PI=acos(-1.0); double area(double a,double b,double c)//海倫公式 { double p=(a+b+c)/2.0; return sqrt(p*(p-a)*(p-b)*(p-c)); } double angle(double x)//角度轉弧度 { return (x*PI/180.0); } int N,DD; double aa; int main() { while(cin>>N>>DD) { double ans=0,D=1.0*DD; for(int i=1;i<=N;i++) { cin>>aa; double ta=sqrt(D*D+D*D-2.0*D*D*cos(angle(aa))); ans+=area(ta,D,D); } cout<<fixed<<setprecision(3)<<ans<<endl; } return 0; }