题目链接:http://acm.fzu.edu.cn/problem.php?pid=2110
InputThe first line of the input contains an integer T (T≤10), indicating the number of test cases.
For each test case:
The first line contains one integer n (1≤n≤100), the number of stars.
The next n lines each contains two integers x and y (0≤|x|, |y|≤1,000,000) indicate the points, all the points are distinct.
Output
Sample Input
Sample Output
Source找有多少个锐角三角形!
代码如下:
#include <cstdio>
#include <cstring>
#include <cmath>
const double PI=acos(-1.0);
struct node
{
double x, y;
}a[1017];
double init(node a, node b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
bool ok(double a,double b,double c)
{
double aa,bb,cc;
cc=acos((a*a+b*b-c*c)/(2*a*b));
bb=acos((a*a+c*c-b*b)/(2*a*c));
aa=acos((b*b+c*c-a*a)/(2*b*c));
if(cc<PI/2.0 && aa<PI/2.0 && bb<PI/2.0)
return 1;
return 0;
}
int main()
{
int t;
int n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i = 0; i < n; i++)
{
scanf("%lf%lf",&a[i].x,&a[i].y);
}
int ans=0;
for(int i = 0; i < n; i++)
{
for(int j = i+1; j < n; j++)
{
for(int k = j+1; k < n; k++)
{
double aa = init(a[i],a[j]);
double bb = init(a[i],a[k]);
double cc = init(a[j],a[k]);
if(ok(aa,bb,cc))
ans++;
}
}
}
printf("%d\n",ans);
}
return 0;
}原文:http://blog.csdn.net/u012860063/article/details/41751339