Pagini recente » Cod sursa (job #503220) | Cod sursa (job #2318398) | Cod sursa (job #1841145) | Cod sursa (job #976079) | Cod sursa (job #2455721)
#include <iostream>
#include <fstream>
#include <map>
using namespace std;
ifstream fin("trapez.in");
ofstream fout("trapez.out");
map<pair<int,int>, int> paralele;
int n;
struct punct
{
int x,y;
void citire()
{
fin>>x>>y;
}
}Puncte[1001];
int cmmdc(int a, int b)
{
while(b)
{
int r=a%b;
a=b;
b=r;
}
return a;
}
void simplifica(pair<int,int> &p)
{
int cmm;
if(p.first<0&&p.second<0)
{
p.first*=-1;
p.second*=-1;
cmm=cmmdc(p.first,p.second);
}
else if(p.first<0)
cmm=cmmdc(p.first*-1,p.second);
else if(p.second<0)
{
cmm=cmmdc(p.first,p.second*-1);
p.second*=-1;
p.first*=-1;
}
p.first/=cmm;
p.second/=cmm;
}
int cmb(int x)
{
return x*(x-1)/2;
}
void solve()
{
fin>>n;
for(int i=0;i<n;i++)
Puncte[i].citire();
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
{
pair<int,int> panta;
panta.first=Puncte[i].y-Puncte[j].y;
panta.second=Puncte[i].x-Puncte[j].x;
simplifica(panta);
paralele[panta]++;
}
int suma=0;
for(auto i : paralele)
suma+=cmb(i.second);
fout<<suma;
}
int main()
{
solve();
return 0;
}