Cod sursa(job #414387)

Utilizator petrecgClinciu Glisca Petre petrecg Data 9 martie 2010 23:50:50
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>
long x[1011],y[1011],a[1011],b[1011],n,i,j,c,l;
long double d[1011],e;
long long nr;
inline long cmmdc(long v,long w)
{long r;
 while(w){r=v%w;v=w;w=r;}
 return v;
}
int main()
{freopen("trapez.in","r",stdin);
 freopen("trapez.out","w",stdout);
 fscanf(stdin,"%ld",&n);
 for(i=1;i<=n;i++)
  {fscanf(stdin,"%ld%ld",&x[i],&y[i]);
   for(j=1;j<i;j++)
    {a[++l]=y[i]-y[j];b[l]=x[i]-x[j];
     c=cmmdc(a[l],b[l]);
     if(c){a[l]/=c;b[l]/=c;}
     if(a[l]*b[l]<0){if(a[l]>0)a[l]=-a[l];if(b[l]<0)b[l]=-b[l];}
     if(a[l]==0&&b[l]<0)b[l]=-b[l];
     if(b[l]==0&&a[l]<0)a[l]=-a[l];
    }
  }
 for(i=1;i<l;i++)
  for(j=i+1;j<=l;j++)
   {if(a[i]>a[j]){c=a[i];a[i]=a[j];a[j]=c;c=b[i];b[i]=b[j];b[j]=c;}
     else if(a[i]==a[j]&&b[i]>b[j]){c=b[i];b[i]=b[j];b[j]=c;}
   }
 n=0;
 for(i=2;i<=l;i++)
  {if(a[i]==a[i-1]&&b[i]==b[i-1])n++;else {nr+=n*(n+1)/2;n=0;}
  }
 nr+=n*(n+1)/2;
 fprintf(stdout,"%lld",nr);
 fclose(stdin);fclose(stdout);
 return 0;
}