Cod sursa(job #314282)

Utilizator funkydvdIancu David Traian funkydvd Data 10 mai 2009 23:49:55
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include<fstream>
#include<stdlib.h>
using namespace std;
ifstream f1 ("trapez.in");
ofstream f2 ("trapez.out");
struct punct {int  x,y;};
punct v[1001];
punct panta[1000001];
int compar2(const void*p, const void*q)
{
   punct a=*(punct*)p,b=*(punct*)q;
   if (a.x==b.x && a.y>b.y) return -1;
   return 0;
}
int compar(const void*p, const void*q)
{
   punct a=*(punct*)p,b=*(punct*)q;
   if (a.x<b.x) return -1;
   if (a.x==b.x && a.y>b.y) return 1;
   if (a.x>b.x) return 1;
   return 0;
}
int main()
{
   int n,i,j,k,nr=0,vv,p,q,f,pp,qq;
   f1>>n;
   for (i=1; i<=n; i++)
      f1>>v[i].x>>v[i].y;
   k=1;
   for (i=1; i<=n; i++)
     for (j=i+1; j<=n; j++)
	{ panta[k].x=v[i].x-v[j].x;
	  panta[k].y=v[i].y-v[j].y;
	  k++;
	}
   k--;
   for (i=1; i<=k; i++)
   {
    p=panta[i].x,q=panta[i].y;
    f=0;
    if (p>0&&q<0) {q*=-1; f=1;}
    if (p<0 && q>0) {p*=-1; f=1;}
    if (p<0 && q<0) {p*=-1; q*=-1;}
    pp=p;qq=q;
    if (p==0) {panta[i].x=0; panta[i].y=0;}
     else if (q==0) {panta[i].x=-1000; panta[i].y=-1000;}
    else {while (p!=q) if (p>q) p=p-q; else q=q-p;
    panta[i].x=pp/p; panta[i].y=qq/q;}
    if (f==1) panta[i].y*=-1;
   }
   qsort(panta+1,k,sizeof(panta[1]),compar);
   for (i=1; i<k; i++)
     {vv=1;
      while  (panta[i].x==panta[i+1].x && panta[i].y==panta[i+1].y && i<k)
	{i++; vv++;}
     if (vv!=1) nr+=(vv*(vv-1))/2;;
     }
  f2<<nr;
  return 0;
}