Pagini recente » Monitorul de evaluare | Cod sursa (job #1511246) | Istoria paginii utilizator/lavi07 | Monitorul de evaluare | Cod sursa (job #2012348)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
struct miau{int x,y;} v[1005],p1,p2,drepte[1000005];
int n,i,j,k,m=0,semn,C,eq,s;
ifstream f("trapez.in");
ofstream g("trapez.out");
bool cmp(miau a, miau b)
{
return a.y<b.y || (a.y==b.y && a.x<b.x);
}
int cmmdc(int a, int b)
{
if(a>b) return cmmdc(b,a);
if(a>0) return cmmdc(b%a,a);
if(a==0) return b;
}
int main()
{
f>>n;
for(i=1;i<=n;i++) f>>v[i].x>>v[i].y;
sort(v+1,v+n+1,cmp);
for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
p1=v[i]; p2=v[j];
semn=1;
p2.x-=p1.x;
p1.x=0;
p2.y-=p1.y;
p1.y=0;
if(p2.x<0) semn=-1, p2.x*=-1;
C=cmmdc(p2.x,p2.y);
p2.x/=C;
p2.y/=C;
p2.x*=semn;
drepte[++m]=p2;
}
}
eq=1; s=0;
sort(drepte+1,drepte+m+1,cmp);
drepte[++m]={-1,-1};
p1=drepte[1];
for(i=2;i<=m;i++)
{
if(drepte[i].x==p1.x && drepte[i].y==p1.y) eq++;
else
{
s+=eq*(eq-1)/2;
eq=1;
p1=drepte[i];
}
}
g<<s<<'\n';
return 0;
}