Pagini recente » Cod sursa (job #1829432) | Cod sursa (job #54640) | Cod sursa (job #1058294) | Cod sursa (job #637350) | Cod sursa (job #1992835)
#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 (b.y - a.y)* (S.b.x - S.a.x)
- (S.b.x - a.x) * (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;
}