三角形

来源:互联网 发布:椰子油 知乎 编辑:程序博客网 时间:2024/05/12 13:41

先将全部直线算出来,是c(n,3)
然后把不符合要求的平行线的情况去掉即可

#include <cstdio>#include <iostream>#include <map>#include <algorithm>using namespace std;double num[9999999];long long sum,cnt;long long tot;long long len[999999];long long cnm1(long long n){    return 1ll*n*(n-1)/2;}long long cnm2(long long n){    return 1ll*n*(n-1)*(n-2)/6;}int main(){    freopen("trokuti.in","r",stdin);    freopen("trokuti.out","w",stdout);    long long n;    long long cnt=0;    scanf("%lld",&n);    for(long long i=1;i<=n;i++)     {        double a,b,c;        scanf("%lf%lf%lf",&a,&b,&c);        double x=(-a)/b;        num[i]=x;     }    sort(num+1,num+n+1);    len[++cnt]=1;    double now=num[1];    long long ans=cnm2(n);    for (long long i=2;i<=n;i++)    if (num[i]!=now)    {    len[++cnt]=1;    now=num[i];    }    else     len[cnt]++;    for(long long i=1;i<=cnt;i++)     ans-=(cnm2(len[i])+cnm1(len[i])*(n-len[i]));    //for(int i=1;i<=cnt;i++)     printf("%lld",ans);}
原创粉丝点击