Pagini recente » Cod sursa (job #1396106) | Cod sursa (job #2080507) | Cod sursa (job #2449518) | Cod sursa (job #3210825) | Cod sursa (job #2568259)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("trapez.in");
ofstream g("trapez.out");
long long int i,j,n,c,d,ctfractii,ind,rezultat;
double val,a,b;
bool gasit=0;
struct fractii
{
double valoare;
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[i].y-p[j].y;
b=p[i].x-p[j].x;
if(b!=0)val=a/b;
else if(a!=0)val=a;
else val=a;
gasit=0;
for(ind=1; ind<=ctfractii; ind++)
if(val==fr[ind].valoare)
{
fr[ind].aparitii++;
gasit=1;
break;
}
if(gasit==0)
{
ctfractii++;
fr[ctfractii].valoare=val;
fr[ctfractii].aparitii++;
}
}
for(i=1; i<=ctfractii; i++)
if(fr[i].aparitii>1)
rezultat+=(fr[i].aparitii*(fr[i].aparitii-1)/2);
g<<rezultat;
}