Cod sursa(job #1649568)

Utilizator Alex.PAlexandru Pacurar Alex.P Data 11 martie 2016 14:13:24
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#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;
}