您的位置:首页 > 其它

HDU 5979 Convex(数学)

2016-11-07 08:57 357 查看

Convex

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)

Total Submission(s): 50    Accepted Submission(s): 42

[align=left]Problem Description[/align]
We have a special convex that all points have the same distance to origin point.

As you know we can get N segments after linking the origin point and the points on the convex. We can also get N angles between each pair of the neighbor segments.

Now give you the data about the angle, please calculate the area of the convex

 

[align=left]Input[/align]
There are multiple test cases.

The first line contains two integer N and D indicating the number of the points and their distance to origin. (3 <= N <= 10, 1 <= D <= 10)

The next lines contain N integers indicating the angles. The sum of the N numbers is always 360.

 

[align=left]Output[/align]
For each test case output one float numbers indicating the area of the convex. The printed values should have 3 digits after the decimal point.

 

[align=left]Sample Input[/align]

4 1
90 90 90 90
6 1
60 60 60 60 60 60

 

[align=left]Sample Output[/align]

2.000
2.598

 

[align=left]Source[/align]
2016ACM/ICPC亚洲区大连站-重现赛(感谢大连海事大学)

题意:一个凸多边形每个顶点到其原点的距离相等,且能把该多边形分成几个部分,给定每个部分的角度,求多边形面积。
思路:一开始没读懂题,以为每个角度都相同WA了一次,但是考虑到了三角形要额外处理,因为三角形有可能会有一个角度超过180。还有就是要掌握角度和弧度的转化。

#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
#include <math.h>
using namespace std;
#define pi 3.1415926
int ang[4];

int main(){

int n,d;
while(~scanf("%d %d",&n,&d)){
double area=0;
for(int i=0;i<n;i++){
int angle;
scanf("%d",&angle);
if(angle<=180)
area+=0.5*d*d*sin(angle*1.0*pi/180.0);
else{
angle=360-angle;
area-=0.5*d*d*sin(angle*1.0*pi/180.0);
}
}
printf("%.3lf\n",area);
}
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: