Cod sursa(job #1981390)

Utilizator cyg_ieeuVasile Radu-Andrei cyg_ieeu Data 15 mai 2017 16:08:31
Problema Trapez Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
struct point
{
    int x,y;
};
point v[1005];
const double infinit = 2000000005;
const double eps = 1.e-14;
vector <double> p;
double panta(point a,point b)
{
    if(abs(a.x - b.x) < eps)
        return infinit;
    else
        return (1.0 * b.y - a.y) / (b.x - a.x);
}
int fact(int n)
{
    int p = 1;
    for(int i = 1;i <= n;i++)
        p *= i;
    return p;
}
int main()
{
    freopen("trapez.in", "r",stdin);
    freopen("trapez.out", "w",stdout);
    int i,n;
    scanf("%d", &n);
    for(i = 1;i <= n;i++)
        scanf("%d%d", &v[i].x, &v[i].y);
    int j;
    for(i = 1;i < n;i++)
        for(j = i + 1;j <= n;j++)
            p.push_back(panta(v[i],v[j]));
    sort(p.begin(),p.end());
    int f,s = 0;
    double m;
    m = p[0];
    f = 1;
    for(i = 1;i < (n * (n - 1)) / 2;i++)
    {
        if(p[i] > m)
        {
            s += fact(f) / (2 * fact(f - 2));
            m = p[i];
            f = 1;
        }
        else if(p[i] == m)
            f++;
    }
    printf("%d",s);
    return 0;
}