Pagini recente » Cod sursa (job #2608203) | Cod sursa (job #33004) | Cod sursa (job #2357621) | Cod sursa (job #2854971) | Cod sursa (job #186158)
Cod sursa(job #186158)
# include <cstdio>
# include <vector>
# include <cstring>
# include <map>
# include <set>
# include <queue>
# include <fstream>
using namespace std;
# define input "trapez.in"
# define output "trapez.out"
# define max 1001
# define abs(a) (a<0?-a:a)
int x,y;
int i,j,n;
struct Punct
{
int x,y;
}p[max];
vector < pair<int, int > > v;
int cmmdc(int a,int b)
{
while(b)
{
int r = a%b;
a = b;
b = r;
}
return a;
}
pair<int, int> panta(Punct A, Punct B)
{
// y2-y1 / x2-x1
int numitor,numarator;
numitor = B.x-A.x;
numarator = B.y - A.y;
if(numitor && numarator)
x = cmmdc(abs(numitor),abs(numarator));
else x = 1;
numitor /= x;
numarator /= x;
if(numitor < 0) numitor *= -1,numarator *= -1;
return make_pair(numitor, numarator);
}
int main()
{
freopen(input, "r", stdin);
freopen(output,"w", stdout);
scanf("%d",&n);
for(i = 1; i<=n;i++)
{
scanf("%d %d ",&x,&y);
p[i].x = x;
p[i].y = y;
}
for(i = 1; i < n; i++)
for( j = i+1; j <= n; j++)
v.push_back(panta(p[i],p[j]));
sort(v.begin(),v.end());
int ret = 0;
for(i = 0; i< v.size(); i++)
{
int nr = 1;
while(i+1 < v.size() && v[i] == v[i+1]) i++, nr++;
ret+=((nr-1)*nr)>>1;
}
printf("%d",ret);
return 0;
}