Pagini recente » Cod sursa (job #1562733) | Cod sursa (job #1213420) | Cod sursa (job #2784192) | Cod sursa (job #2413168) | Cod sursa (job #1398302)
#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;
for (i=0; i<n-3; ++i)
{
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++;
}
g<<rez;
return 0;
}