题目链接:http://acm.fzu.edu.cn/problem.php?pid=2110
The 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.
找有多少个锐角三角形!
代码如下:
#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