Circum Triangle
Input: Standard Input
Output: Standard Output
You will be given N distinct points on the boundary of a circle whose center is at the origin. As the points are on the same circle no three of them are collinear, so any three of them creates a valid triangle. Your job is to find the summation of areas of these nc3 triangles.
Input
Input file contains at most 16 sets of inputs. The description of each set is given below:
Each set starts with two integers N (0 ≤ N ≤ 500) and R(0<R ≤ 100). Here N is the number of points and R is the radius of the circle. You can assume that the center of the circle is always at the origin. This line is followed by N lines each of which contains a floating-point number theta (0.0<=theta<360.00) which actually denotes the angle in degree the designated point creates with respect to the origin with x-axis. So for example if theta is 30.00 degree then the Cartesian coordinate of the intended point is (and. Assume that pi=2cos-1(0).
Input is terminated by a set where the value of N and R is zero. This set should not be processed.
Output
For each line of input produce one line of output. This line contains an integer number which is the total area (rounded to nearest integer) of all possible triangles formed by the given N points. The judge data will be such that small precision errors will not cause the output to be different. Consider at least double-precision floating numbers to do your calculations.
Sample Input Output for Sample Input
5 10 10.00 100.00 300.00 310.00 320.00 3 20 10.00 100.00 300.00 0 0 | 286 320
|
题意:就是求n个点可以组成的三角形的面积之和。
思路:运用叉积求三角形面积。
AC代码如下:
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n;
double r,x[510],y[510],p,ans,eps=1e-8;
double multiply(int a,int b)
{
return x[a]*y[b]-y[a]*x[b];
}
double area(int a,int b,int c)
{
return abs(multiply(a,b)+multiply(b,c)+multiply(c,a));
}
int main()
{
int i,j,k;
while(~scanf("%d%lf",&n,&r))
{
if(n==0 && r==0)
break;
ans=0;
for(i=1;i<=n;i++)
{
scanf("%lf",&p);
p=p/180*M_PI;
x[i]=r*cos(p);
y[i]=r*sin(p);
}
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
for(k=j+1;k<=n;k++)
ans+=area(i,j,k);
printf("%.0f\n",ans/2);
}
}