当前位置: 代码迷 >> 综合 >> HDU5979 - The 2016 ACM-ICPC Asia Dalian Regional Contest - I - Convex - (简单计算几何-求三角形面积)
  详细解决方案

HDU5979 - The 2016 ACM-ICPC Asia Dalian Regional Contest - I - Convex - (简单计算几何-求三角形面积)

热度:41   发布时间:2024-01-12 14:57:06.0

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5979

题意:有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;
}