Pagini recente » Borderou de evaluare (job #1609049) | Cod sursa (job #374266) | Cod sursa (job #1962733) | Monitorul de evaluare | Cod sursa (job #1649568)
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
struct pct{
int l;
int c;
};
pct p[1000];
struct panta{
int x;
int y;
};
panta v[1000000];
int mod(panta a, panta b){
if(a.x*b.y<=a.y*b.x)
return 1;
return 0;
}
int mod2(pct a, pct b){
if(a.l<b.c)
return 1;
else if(a.l==b.l && a.c<b.c)
return 1;
return 0;
}
int main()
{
FILE *fin, *fout;
int n,i,j,x,l,g;
fin=fopen("trapez.in","r");
fout=fopen("trapez.out","w");
fscanf(fin,"%d",&n);
for(x=0;x<n;x++){
fscanf(fin,"%d%d",&i,&j);
p[x].l=i;
p[x].c=j;
}
sort(p,p+n,mod2);
x=0;
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
v[x].x=p[i].l-p[j].l;
v[x].y=p[i].c-p[j].c;
if(v[x].x<0)
v[x].x=-v[x].x;
if(v[x].y<0)
v[x].y=-v[x].y;
x++;
}
}
sort(v,v+x,mod);
g=0;
l=1;
for(i=1;i<x;i++){
if(v[i].x*v[i-1].y==v[i].y*v[i-1].x)
l++;
else{
g=g+(l*(l-1)/2);
l=1;
}
}
fprintf(fout,"%d",g);
fclose(fin);
fclose(fout);
return 0;
}