Cod sursa(job #1033704)

Utilizator hevelebalazshevele balazs hevelebalazs Data 17 noiembrie 2013 14:46:43
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
#include <stdlib.h>
#define fr(i,a,b) for(int i=a;i<b;++i)
#define ll long long
#define N 1000
#define M 500000
using namespace std;
int x[N],y[N],n;
struct p{
    int x,y;
    void s(int x1,int y1,int x2,int y2){
        if(x1==x2)x=0,y=1;
        else if(x1<x2) x=x2-x1,y=y2-y1;
        else x=x1-x2,y=y1-y2;
        }
    }r[M];
int c(const void*a,const void*b){
    return -((ll)((*(p*)a).x)*((*(p*)b).y)-((ll)((*(p*)a).y)*((*(p*)b).x)))<0?-1:1;
    }
int main(){
    freopen("trapez.in","r",stdin);
    freopen("trapez.out","w",stdout);
    scanf("%i",&n);
    int l=-1;
    fr(i,0,n)scanf("%i%i",x+i,y+i);
    fr(i,0,n)fr(j,i+1,n)r[++l].s(x[i],y[i],x[j],y[j]);++l;
    qsort(r,l,sizeof(p),c);
    ll s=0;
    fr(i,0,l) {
        int j=1;
        while(i+j<l&&r[i].x*r[i+j].y==r[i].y*r[i+j].x)++j;
        i+=j-1;
        s+=j*(j-1)/2;
        }
    printf("%lli",s);
    return 0;
    }