Cod sursa(job #2616997)

Utilizator roxana1708Roxana Gherghina roxana1708 Data 20 mai 2020 16:09:49
Problema Trapez Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <stdio.h>

using namespace std;

struct coord {
    int x;
    int y;
} coordonate[1001];

int main() {
    std::ifstream f("trapez.in");
    std::ofstream g("trapez.out");

    int n;
    f >> n;
    float panta[n*(n-1)/2];
    int k = 0;
    for(int i = 0; i < n; i++)
        f >> coordonate[i].x >> coordonate[i].y;

    int v = 0;
    int o = 0;

    for(int i = 0; i < n-1; i++) {
        for (int j = i + 1; j < n; j++) {
            int dx = coordonate[j].x - coordonate[i].x;
            int dy = coordonate[j].y - coordonate[i].y;

            if(dx == 0)
                v ++;
            else if(dy == 0)
                o++;
            else {
                if(coordonate[j].x > coordonate[i].x)
                    panta[k] = ((float)(coordonate[j].y - coordonate[i].y) / (float)(coordonate[j].x - coordonate[i].x));
                else
                    panta[k] = ((float)(coordonate[i].y - coordonate[j].y) / (float)(coordonate[i].x - coordonate[j].x));
                k++;
            }
        }
    }


    sort(panta, panta+k);

    int nr = 1;
    int sol = v*(v - 1)/2 + o*(o-1)/2;
    for(int i = 0; i < k-1; i++) {
        if (panta[i] == panta[i + 1]) {
            nr++;
        }
        else {
            sol += nr * (nr - 1) / 2;
            nr = 1;
        }
    }

    g << sol;
    f.close();
    g.close();
    return 0;
}