zoukankan      html  css  js  c++  java
  • 三角形

    /*
        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; 
    }
  • 相关阅读:
    Extended Traffic LightOJ
    SPFA()判环
    Ignatius and the Princess IV HDU 1029
    DNA sequence HDU
    Eight HDU
    哈密顿绕行世界问题 HDU2181
    F
    E
    Hash记录字符串
    无序map 记录一下
  • 原文地址:https://www.cnblogs.com/xiaoningmeng/p/5996659.html
Copyright © 2011-2022 走看看