Pagini recente » Cod sursa (job #7300) | Cod sursa (job #1831031) | Cod sursa (job #1626014) | Cod sursa (job #2190921) | Cod sursa (job #1992834)
#include <fstream>
#include <algorithm>
#include <cmath>
#include <iostream>
using namespace std;
ifstream fin("trapez.in");
ofstream fout("trapez.out");
int n,nr=1,num,sol;
const double eps=0.0001;
struct punct{
int x,y;
};
punct p[1001];
struct segm{
punct a, b;
double tan;
bool operator < (const segm& S) const
{
return (fabs(b.y - a.y)) * fabs((S.b.x - S.a.x))
- fabs((S.b.x - a.x)) * fabs((S.b.y - S.a.y)) < 0;
}
};
segm S[10000000];
bool cmp(segm i,segm j)
{ return i.tan-j.tan<eps;
}
double Panta(punct A, punct B)
{ if(B.x==A.x)
return -1;
return (double)(B.y - A.y) / (B.x - A.x);
}
int combinari(int c,int k)
{
if (k==0)
return 1;
else
if (k>c)
return 0;
else
return (combinari(c-1,k)+combinari(c-1,k-1));
}
int main()
{ fin>>n;
for(int i=1; i<=n; i++)
fin>>p[i].x>>p[i].y;
for(int i=1; i<=n; i++)
for(int j=i+1; j<=n; j++)
{
S[nr].a.x=p[i].x;
S[nr].a.y=p[i].y;
S[nr].b.x=p[j].x;
S[nr].b.y=p[j].y;
S[nr].tan=Panta(p[i],p[j]);
nr++;
}
nr--;
sort(S+1,S+nr+1);
for(int i=1;i<=nr; i++)
{ if(S[i].tan!=S[i-1].tan)
{if(num>1)
sol+=combinari(num,2);
num=1;
}
else
num++;
}
fout<<sol;
}