Pagini recente » Cod sursa (job #1685899) | Cod sursa (job #218042) | Cod sursa (job #1712061) | Cod sursa (job #845503) | Cod sursa (job #1489545)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f ("trapez.in");
ofstream g ("trapez.out");
struct point
{
unsigned x,y;
}v[1005];
int n,i,j,k,nr;
struct asd
{
int a,b;
}p[1000010];
int cmmdc (int &a, int &b)
{
//if (a*b==0) return 1;
if (a==0)
{
b=1;
return 0;
}
if (b==0)
{
a=1;
return 0;
}
int x=a,y=b;
if (a<0) a=-a;
if (b<0) b=-b;
int r=a%b;
while (r!=0)
{
a=b;
b=r;
r=a%b;
}
x/=b;
y/=b;
a=x;
b=y;
return 0;
}
int poz(int ls, int ld)
{
int i=ls,j=ld,sw=1;
while (i<j)
{
if (p[i].a>p[j].a||(p[i].a==p[j].a&&p[i].b>p[j].b))
{
p[0]=p[i];
p[i]=p[j];
p[j]=p[0];
sw=!sw;
}
i+=sw;
j-=!sw;
}
return i;
}
void quick(int ls, int ld)
{
int p;
if (ls<ld)
{
p=poz(ls,ld);
quick(ls,p-1);
quick(p+1,ld);
}
}
int main()
{
f>>n;
k=0;
for (i=1;i<=n;i++)
f>>v[i].x>>v[i].y;
for (i=1;i<n;i++)
for (j=i+1;j<=n;j++)
{
k++;
p[k].a=v[j].y-v[i].y;
p[k].b=v[j].x-v[i].x;
int c=cmmdc(p[k].a,p[k].b);
//p[k].a/=c;
//p[k].b/=c;
}
quick(1,k);
//for (i=1;i<=k;i++)
// cout<<p[i].a<<' '<<p[i].b<<'\n';
i=1;
while (i<k)
{
int z=0;
while (p[i].a==p[i+1].a&&p[i].b==p[i+1].b&&i<=k)
{
i++;
z++;
}
nr+=(z*(z+1)/2);
i++;
}
g<<nr;
return 0;
}