Pagini recente » Cod sursa (job #112957) | Rating marius muntean (mdmsebes) | Cod sursa (job #1362248) | Cod sursa (job #1266446) | Cod sursa (job #1650586)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("trapez.in");
ofstream fout("trapez.out");
struct panta
{
int x,y,s;
};
vector <panta> p;
panta a,c[1005];
int N,i,j,d,X,Y,K,k,L2;
long long Sol;
int comp(panta a,panta b)
{
if( a.x == b.x )
return ( a.y < b.y );
return ( a.x < b.x );
}
void read()
{
fin>>N;
for(i=1;i<=N;i++)
{
fin>>c[i].x;
fin>>c[i].y;
}
sort(c+1,c+N+1,comp);
}
bool Compare( panta a , panta b )
{
if(a.s == b.s)
{
if( a.x == b.x )
return ( a.y < b.y );
else
return ( a.x < b.x );
}
return a.s < b.s;
}
int cmmdc(int a, int b)
{
if(!b)
{
return a;
}
return cmmdc(b,a%b);
}
void solve()
{
for(i=1;i<=N;i++)
{
for(j=i+1;j<=N;j++)
{
X=c[i].x-c[j].x;
Y=c[i].y-c[j].y;
if((X>0 && Y<0) || (X<0 && Y>0))
{
a.s=-1;
}
else
{
a.s=1;
}
X=abs(X);
Y=abs(Y);
if(X!=0 && Y!=0)
d=abs(cmmdc(X,Y));
if(X!=0 && Y!=0)
{
X=X/d;
Y=Y/d;
}
a.x=X;
a.y=Y;
p.push_back(a);
}
}
sort(p.begin(),p.end(),Compare);
L2=p.size();
for(i=0;i<L2-1;++i)
if(p[i].x == p[i+1].x && p[i].y == p[i+1].y && p[i].s == p[i+1].s) k++;
else
{
if((p[i].x==0 && p[i+1].x==0) || (p[i].y==0 && p[i+1].y==0))
{
k++;
}
else
{
Sol += k*(k-1)/2;
k = 1;
}
}
Sol += k*(k-1)/2;
fout<<Sol<<"\n";
}
int main()
{
read();
solve();
return 0;
}