Cod sursa(job #1398303)

Utilizator crysstyanIacob Paul Cristian crysstyan Data 24 martie 2015 09:18:20
Problema Patrate 3 Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <fstream>
#include <cmath>
#include <vector>
#include <algorithm>
#include <iomanip>
#define eps 0.000001

using namespace std;

ifstream f("patrate3.in");
ofstream g("patrate3.out");

int i, n, j;

struct punct
{
    double x, y;
};
vector <punct> v;

struct dreapta
{
    double lungime, panta;
};
vector <dreapta> x;

double calculeaza_lungime(punct a, punct b)
{
    return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}

double calculeaza_panta(punct a, punct b)
{
    return (a.y-b.y)/(a.x-b.x);
}

bool cmp(dreapta a, dreapta b)
{
    if (a.lungime==b.lungime) return a.panta<b.panta;
    return a.lungime<b.lungime;
}

bool egale(double a, double b)
{
   if (fabs(a-b)<eps) return 1;
   return 0;
}

int main()
{
    f>>n;
    punct m;
    dreapta d;
    double panta, lungime;
    for (i=1; i<=n; ++i)
    {
        f>>m.x>>m.y;
        v.push_back(m);
    }

    for (i=0; i<n-1; ++i)
    for (j=i+1; j<n; ++j)
    {
        lungime=calculeaza_lungime(v[i],v[j]);
        panta=calculeaza_panta(v[i],v[j]);
        d.lungime=lungime;
        d.panta=panta;
        x.push_back(d);
    }

    n=x.size();
    sort(x.begin(),x.end(),cmp);
  //  for (i=0; i<n; ++i)
  //  g<<x[i].lungime<<" "<<x[i].panta<<'\n';

    i=0;
    int rez=0;
 //   g<<x[3].panta*x[4].panta*x[5].panta*x[6].panta;
    while (i<n-3)
    {
        if (egale(x[i].lungime,x[i+3].lungime) && egale(x[i].panta*x[i+1].panta*x[i+2].panta*x[i+3].panta,1.0))
        rez++,i+=4;
        else
        if(egale(x[i].lungime,x[i+3].lungime)) i+=4;
        else
        i++;
    }
    g<<rez;
    return 0;
}