Cod sursa(job #1736621)

Utilizator VladTiberiuMihailescu Vlad Tiberiu VladTiberiu Data 2 august 2016 12:13:58
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <bits/stdc++.h>

#define NMax 1005
#define INF std::numeric_limits<double>::max();
using namespace std;
ifstream f("trapez.in");
ofstream g("trapez.out");
struct drepte{
    double a;
};

drepte dr[NMax * NMax];
int n,nr,ans,in;
double x[NMax],y[NMax];


bool cmp(drepte x, drepte y){
    if(x.a > y.a)
        return 1;
    return 0;
}
int main()
{
    f >> n;
    for(int i = 1; i <= n; ++i){
        f >> x[i] >> y[i];
    }
    for(int i = 1; i <= n; ++i){

        for(int j = i + 1; j <= n; ++j){
            if(x[i] - x[j] == 0){
                ++in;
            }else{
                dr[++nr].a = (double)(y[j] - y[i]) / (x[j] - x[i]);
            }
        }
    }


    sort(dr + 1, dr + 1 + nr, cmp);
    int part = 0;
    ans += ((in * (in - 1))/2);
    for(int i = 2; i <= nr; ++ i){
        if(dr[i].a == dr[i - 1].a){
            part++;
        }else{
            ans += ((part * (part - 1)) / 2);
            part = 1;
        }
    }
    ans += ((part * (part - 1)) / 2);
    g << ans << '\n';
    return 0;
}