Pagini recente » Cod sursa (job #2913251) | Cod sursa (job #1148164) | Cod sursa (job #274241) | Cod sursa (job #230961) | Cod sursa (job #2562872)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("trapez.in");
ofstream g("trapez.out");
long long int i,j,n,a,b,c,d,ctfractii,ind,rezultat,semnula,semnulb;
bool gasit=0;
struct fractii
{
long long int numarator;
long long int numitor;
long long int aparitii;
} fr[100010];
struct coordonate
{
long long int x;
long long int y;
} p[100010];
bool cmp(coordonate a, coordonate b)
{
if(a.x>b.x) return 0;
else if (a.x==b.x && a.y>b.y) return 0;
return 1;
}
int main()
{
f>>n;
for(i=1; i<=n; i++)
f>>p[i].x>>p[i].y;
sort(p+1,p+n+1,cmp);
///for(i=1;i<=n;i++)
///cout<<p[i].x<<' '<<p[i].y<<'\n';
for(i=1; i<n; i++)
for(j=i+1; j<=n; j++)
{
a=p[j].y-p[i].y;
b=p[j].x-p[i].x;
//cout<<i<<' '<<j<<' '<<a<<' '<<b<<' '<<'\n';
if(a<0&&b<0)
{
a=-a;
b=-b;
semnula=1;semnulb=1;
}
else if(a<0)
{
a=-a;
semnula=-1;
semnulb=1;
}
else if(b<0)
{
b=-b;
semnulb=-1;
semnula=1;
}
else if(a>0&&b>0)semnula=1,semnulb=1;
/// cout<<i<<' '<<j<<' '<<a<<' '<<b<<' '<<'\n';
if(a!=0&&b!=0)
{
c=a;
d=b;
/// cout<<c<<d;
while(c!=d)
if(c>d)c=c-d;
else if(d>c)d=d-c;
if(c!=a)
{
a/=c;
b/=c;
}
else if(a==b)
a=1,b=1;
gasit=0;
for(ind=1; ind<=ctfractii; ind++)
if(a==fr[ind].numarator&&b==fr[ind].numitor)
{
fr[ind].aparitii++;
gasit=1;
break;
}
if(gasit==0)
{
ctfractii++;
fr[ctfractii].numarator=a*semnula;
fr[ctfractii].numitor=b*semnulb;
fr[ctfractii].aparitii++;
}
}
else
{
gasit=0;
for(ind=1; ind<=ctfractii; ind++)
if(a==fr[ind].numarator&&b==fr[ind].numitor)
{
fr[ind].aparitii++;
gasit=1;
break;
}
if(gasit==0)
{
ctfractii++;
fr[ctfractii].numarator=a*semnula;
fr[ctfractii].numitor=b*semnulb;
fr[ctfractii].aparitii++;
}
}
}
/* for(i=1; i<=ctfractii; i++)
cout<<fr[i].numarator<<' '<<fr[i].numitor<<' '<<fr[i].aparitii<<'\n';*/
for(i=1; i<=ctfractii; i++)
if(fr[i].aparitii>1)
rezultat+=(fr[i].aparitii*(fr[i].aparitii-1)/2);
g<<rezultat;
}