Pagini recente » Cod sursa (job #2046319) | Cod sursa (job #744432) | Cod sursa (job #1600620) | Cod sursa (job #1585938) | Cod sursa (job #2457856)
#include <iostream>
#include <fstream>
#include <map>
using namespace std;
ifstream f("trapez.in");
ofstream g("trapez.out");
map<pair<int,int>, int> paralele;
int n;
struct punct
{
int x,y;
void citire()
{
f>>x>>y;
}
} Puncte[1001];
int cmmdc(int a, int b)
{
if(b==0)
return a;
return cmmdc(b,a%b);
}
void simplificare(pair<int,int> &p)
{
int cmm;
if(p.first>=0 && p.second>=0)
cmm=cmmdc(p.first,p.second);
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 combinari(int x)
{
return x*(x-1)/2;
}
int main()
{
f>>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;
simplificare(panta);
paralele[panta]++;
}
int suma=0;
for(auto i : paralele)
suma+=cpmbinari(i.second);
g<<suma;
return 0;
}