Cod sursa(job #1720752)

Utilizator SburlyAndrei Florin Sburly Data 23 iunie 2016 13:54:10
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
/********************
    Created by Sburly
********************/
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

#define err 0.00000000001

unsigned int n;

vector<pair<unsigned long int, unsigned long int> > v(1000);
vector<double> p(1000000);

inline bool aprox(double a, double b)
{
    if(-err < a-b && a-b < err)
        return true;
    return false;
}

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

    f >> n;

    for(unsigned int i = 0; i < n; i++)
    {
        f >> v[i].first;
        f >> v[i].second;
    }

    unsigned int k = 0;
    unsigned int l = 0;
    for(unsigned int i = 0; i < n-1; i++)
    {
        for(unsigned int j = i+1; j < n; j++)
        {
            if(v[j].first == v[i].first)
            {
                l++;
            }
            else
            {
                p[k++] = (double)(((double)((double)v[j].second-(double)v[i].second))/((double)((double)v[j].first-(double)v[i].first)));
            }
        }
    }

    sort(p.begin(), p.begin()+k);

    unsigned int sol = l*(l-1)/2;
    l = 1;
    for(unsigned int i = 0; i < k-1; i++)
    {
        if(aprox(p[i],p[i+1]))
            l++;
        else
        {
            sol+=l*(l-1)/2;
            l=1;
        }
    }
    g << sol;

    return 0;
}