LA 4064 求n个点 可以组成多少个锐角或者直角三角形

来源:互联网 发布:网络分销协议 编辑:程序博客网 时间:2024/05/07 12:34
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define eps 1e-8#define PI acos(-1.0)using namespace std;struct node{double x,y;}p[1260];double d[2560];int dcmp(double x){if(fabs(x)<eps)return 0;elsereturn x>0?1:-1;}int main(){    int n,t=1;    while(~scanf("%d",&n) && n)    {        long long int res=0;for(int i=0;i<n;i++)scanf("%lf%lf",&p[i].x,&p[i].y);       for(int i=0;i<n;i++){int cnt=0;for(int j=0;j<n;j++){if(i!=j)d[cnt++]=atan2(p[j].y-p[i].y,p[j].x-p[i].x);}sort(d,d+cnt);for(int j=0;j<cnt;j++)d[j+cnt]=d[j]+2*PI;int l=0,r=0;for(int j=0;j<cnt;j++){while(dcmp(d[l]-d[j]-PI/2)<0)l++;while(dcmp(d[r]-d[j]-PI)<0)r++;res+=(r-l); }}        res=n*(n-1)*(n-2)/6-res;        printf("Scenario %d:\n",t++);        printf("There are %lld sites for making valid tracks\n",res);    }    return 0;}