• 三角形


    /*
        windows下long long 用I64d,不长记性!
        斜率没有的时候那个赋值不能用-1,因为有可能有斜率为-1的直线(虽然这题数据里没有。要赋成负无穷
    */
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<map>
    #define INF 1e9+5
    using namespace std;
    #define ll long long
    int n;
    double b[100010];
    map<double,ll>a;
    ll c(int n,int m)
    {
        if(n<m)return 0;
        ll s=1,i;
        for(i=n;i>=n-m+1;i--)s*=i;
        for(i=1;i<=m;i++)s/=i;
        return s;
    }
    
    int main()
    {
        freopen("trokuti.in","r",stdin);
        freopen("trokuti.out","w",stdout);
        scanf("%d",&n);
        ll tot=0,k;
        for(int i=1;i<=n;i++)
        {
            ll A,B,C;
            scanf("%I64d%I64d%I64d",&A,&B,&C);
            if(B==0)
                a[-INF]++;//记录没有斜率的直线
            else 
            {
                double q=(double(A)/B)*1.0;//不是真正的斜率,只是一个比值 
                if(a[q]==0) b[++tot]=q;//tot记录不同斜率直线的种类 
                a[q]++;//斜率同为q的直线有多少条 
            }
        }
        if(a[-INF]) b[++tot]=-INF;//如果有无斜率的直线,那么再加一种斜率 
        ll ans=c(n,3);
        for(int i=1;i<=tot;i++)
        {
            k=a[b[i]];
            ans-=c(k,3);//三边平行或重合 
            ans-=c(k,2)*(n-k);//两边平行或重合 
        }
        printf("%I64d",ans);
        fclose(stdin);fclose(stdout);
        return 0; 
    }
  • 相关阅读:
    Spring static 静态属性注入
    大众点评Cat--架构分析
    rxjava
    TCP/IP协议三次握手与四次握手流程解析
    [SDOI2014]数数
    CF-GYM101741K. Consistent Occurrences
    [JSOI2012]玄武密码
    [POI2000]病毒
    [JSOI2007]文本生成器
    [HNOI2006]最短母串问题
  • 原文地址:https://www.cnblogs.com/xiaoningmeng/p/5996659.html
Copyright © 2020-2023  润新知