Pagini recente » Borderou de evaluare (job #388670) | Cod sursa (job #953904) | Cod sursa (job #2421950) | Cod sursa (job #428179) | Cod sursa (job #323186)
Cod sursa(job #323186)
#include<fstream>
#define maxn 1005
using namespace std;
ifstream f("trapez.in");
ofstream g("trapez.out");
struct panta
{
int x;
int y;
} a[maxn],b[maxn*maxn],c[maxn*maxn],k;
int n,i,j,p,q,r;
long long rez;
int mod(int a)
{
if(a<0) return -a;
return a;
}
bool fcomp(panta a, panta b)
{
return a.x*b.y<a.y*b.x;
}
bool comp(panta a,panta b)
{
return (a.x==0&&b.x==0)||(a.y==0&&b.y==0)||(a.x==b.x&&a.y==b.y);
}
int main()
{
f>>n;
for(i=1;i<=n;++i)
f>>a[i].x>>a[i].y;
for(i=1;i<=n;++i)
for(j=i+1;j<=n;++j)
{
k.x=a[i].y-a[j].y;
k.y=a[i].x-a[j].x;
if(k.x<0&&k.x<0)
k.x=-k.x,k.y=-k.y,b[++p]=k;
else
if(k.x<0||k.y<0)
k.x=mod(k.x),k.y=mod(k.y),c[++q]=k;
else
b[++p]=k;
}
sort(b+1,b+p+1,fcomp);
sort(c+1,c+q+1,fcomp);
r=1;
for(i=2;i<=p;++i)
if(!comp(b[i],b[i-1]))
rez+=(i-r)*(i-r-1)/2,r=i;
rez+=(i-r)*(i-r-1)/2;
r=1;
for(i=2;i<=q;++i)
if(!comp(c[i],c[i-1]))
rez+=(i-r)*(i-r-1)/2,r=i;
rez+=(i-r)*(i-r-1)/2;
g<<rez<<"\n";
f.close();
g.close();
return 0;
}