Pagini recente » Cod sursa (job #588736) | Cod sursa (job #884549) | Cod sursa (job #2029147) | Cod sursa (job #477966) | Cod sursa (job #732053)
Cod sursa(job #732053)
#include<fstream>
#include<cmath>
#include<algorithm>
#define dim 1000010
using namespace std;
ifstream f("trapez.in");
ofstream g("trapez.out");
struct panta
{
int abscisa,ordonata;
};
panta a[dim], p[1005];
int i,j,n,m,cmmdc,nr,x,y,r,rez;
inline int select(int fx, int fy)
{
if (fy==0)
return fx;
else
return select(fy, fx%fy);
}
inline bool comp (panta fx, panta fy)
{
return fx.abscisa<fy.abscisa || (fx.abscisa==fy.abscisa && fx.ordonata<fy.ordonata);
}
inline void citeste_rezolva()
{
f>>n;
for (i=1; i<=n; i++)
f>>p[i].abscisa>>p[i].ordonata;
for (i=1; i<=n; i++)
for (j=i+1; j<=n; j++)
{
if (p[i].abscisa==p[j].abscisa)
{
a[++nr].abscisa=2;
a[nr].ordonata=2;
}
else
{
x=p[i].abscisa-p[j].abscisa;
y=p[i].ordonata-p[j].ordonata;
if (x<0)
{
x*=-1;
y*=-1;
}
cmmdc=select(abs(x), abs(y));
a[++nr].abscisa=x/cmmdc;
a[nr].ordonata=y/cmmdc;
}
}
}
inline void finish()
{
citeste_rezolva();
sort (a+1, a+nr+1, comp);
for (i=1; i<=nr; i++)
{
r=0;
while (a[i].abscisa==a[i+1].abscisa && a[i].ordonata==a[i+1].ordonata)
{
i++;
r++;
}
rez=rez+(r*(r+1))/2;
}
g<<rez;
}
int main()
{
finish();
return 0;
}