• JZOJ 3493. 【NOIP2013模拟联考13】三角形


    Description

    平面上有n个点,求出用这些点可以构成的三角形数。
     

    Input

    第一行一个整数n。

    接下来n行,每行两个整数,表示点的坐标。

    Output

    输出仅一个整数,表示所求答案。
     

    Sample Input

    5
    0 0
    1 1
    1 -1
    -1 -1
    -1 1

    Sample Output

    8
     

    Data Constraint

    对于50%的数据,n<=300。

    对于100%的数据,n<=3000,坐标的绝对值不超过10^4,保证没有重合的点。
     
    做法:确定第一个点,枚举直线,判断不能形成三角形的情况,斜率不存在时要特判。
     
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #define N 3007
    using namespace std;
    int n, h[N], z[N], tot, cnt, c[N * 2];
    long long ans;
    bool b[N];
    double K[N];
    
    int main()
    { 
    //    freopen("triangle.in", "r", stdin);
    //    freopen("triangle.out", "w", stdout);
        scanf("%d", &n);
        for (int i = 1; i <= n; i++)
            scanf("%d%d", &h[i], &z[i]);
        ans = (n * (n - 1)) / 2;
        ans *= n - 2;
        ans /= 3;
        for (int i = 1; i <= n - 1; i++)
        {
            cnt = 0;
            tot = 0;
            for (int j = i + 1; j <= n; j++)
                if (h[i] == h[j])    tot++;
                else    K[++cnt] = (double)(z[i] - z[j]) / (double)(h[i] - h[j]);
            sort(K + 1, K + cnt + 1);
            ans -= (tot * (tot - 1)) / 2;
            tot = 1;
            for (int j = 2; j <= cnt; j++)
            {
                if (K[j] == K[j - 1]) tot++;
                else tot = 1;
                ans -= tot - 1;
            }
        }
        printf("%lld", ans);
        fclose(stdin);
        fclose(stdout);
    }
    View Code
  • 相关阅读:
    【转】BP神经网络
    【转】Matlab的regionprops详解
    【转】本人常用资源整理(ing...)
    【转】LDA-linear discriminant analysis
    [转]推荐几个机器学习算法及应用领域相关的中国大牛:
    【转】机器学习资料推荐
    《转贴》机器学习 机器视觉 图像处理 牛人牛站
    [转]LLE
    UVA10651
    UVA10051
  • 原文地址:https://www.cnblogs.com/traveller-ly/p/9434567.html
Copyright © 2020-2023  润新知