Cod sursa(job #697044)

Utilizator AndreeaNNedelcu Andreea AndreeaN Data 28 februarie 2012 21:48:54
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <stdio.h>
#include<algorithm>
FILE *f=fopen("trapez.in","r"),*g=fopen("trapez.out","w");
long int n,poz=0;
double p[1000010];

struct punct{
    long int  x;
    long int  y;
}v[1001];
using namespace std;

void citire(){
long int i;
    fscanf(f,"%ld\n",&n);
    for(i=1; i<=n; i++){
        fscanf(f,"%ld %ld\n",&v[i].x,&v[i].y);
    }
}



void gaseste_paralele(){
long int i,j,a,b,c,d,k=0;
long long rez=0,nrp;
double panta;
    for(i=1; i<=n; i++){
        a=v[i].x; b=v[i].y;
        for(j=i+1; j<=n; j++){
            c=v[j].x; d=v[j].y;
            k++;
            if(b-d==0){p[k]=2000000001;}
            else if(a-c==0){p[k]=0;}
            else{
               p[k]=(double)(v[j].y - v[i].y) / (double)(v[j].x - v[i].x);
            }

        }
    }
   // printf("%ld",k);
    sort(p+1,p+k+1);
   /* for(i=1; i<=k; i++){
        fprintf(g,"%f\n",p[i]);
    }*/
    j=1; nrp=0; i=1;
    while(i<k){
        while(p[j+1]==p[i] && j<=k){
            j++;
        }
        nrp=j-i+1;
        rez=rez+nrp*(nrp-1)/2;
        i=j+1;
    }
    fprintf(g,"%lld",rez);
}

int main()
{
    citire();
    gaseste_paralele();
    return 0;
}