Cod sursa(job #2771817)

Utilizator SerbaP123Popescu Serban SerbaP123 Data 29 august 2021 13:23:13
Problema Trapez Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb

#include <fstream>
#include <cmath>
#include <vector>
#include <algorithm>
#include <map>
#include <string>
#include <bitset>
#define pb(a) push_back(a)
#pragma GCC optimize("Ofast")
using namespace std;

ifstream cin("trapez.in");
ofstream cout("trapez.out");

struct point{
    int x, y;
}v[1001];

struct functie{
    double a, b;
}f[1001 * 1001];

int n, p = 1, x, y;

bool cmp(functie n, functie m){
    if((double) -n.a / n.b < (double) -m.a / m.b){
        return true;
    }
    else if((double) -n.a / n.b == (double) -m.a / m.b && n.a < m.a){
        return true;
    }
    else if((double) -n.a / n.b == (double) -m.a / m.b && n.a == m.a && n.b < m.b){
        return true;
    }
    return false;
}

int main(){
    cin >> n;
    for(int i = 1; i <= n; ++i){
        cin >> x >> y;
        v[i].x = x;
        v[i].y = y;
    }
    for(int i = 1; i < n; ++i){
        for(int j = i + 1; j <= n; ++j){
            double n, m;
            n = v[i].y - v[j].y;
            m = v[j].x - v[i].x;
            f[p].a = n;
            f[p].b = m;
            p++;
        }
    }
    p--;
    sort(f + 1, f + p + 1, cmp);
    long long ans = 0, cnt = 0;
    for(int i = 1; i < p; ++i){
        if(-f[i].a / f[i].b == -f[i + 1].a / f[i + 1].b){
            cnt++;
        }
        else{
            ans += cnt;
            cnt = 0;
        }
    }
    cout << ans;
    return 0;
}