Cod sursa(job #132593)

Utilizator razvi9Jurca Razvan razvi9 Data 6 februarie 2008 10:48:59
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<cstdio>
#include<vector>
#include<algorithm>
int n,i,j,m,x,y,c;
std::pair<int,int> v[1000];
std::pair<int,int> a[1000*1000],aux;
long long rez;

int cmmdc(int a,int b){
	if(b==0)return a;
	return cmmdc(b,a%b);}
int mod(int a){
	if(a<0) return -a;
	return a;}
long long comb(int k){
	long long r=k;
	r*=(k-1);
	r>>=1;
	return r;}

int main()
{
	freopen("trapez.in","r",stdin);
	freopen("trapez.out","w",stdout);
	scanf("%d",&n);
	for(i=0;i<n;++i)scanf("%d %d",&v[i].first,&v[i].second);
	for(i=0;i<n;++i)
		for(j=i+1;j<n;j++){
			x=v[i].first-v[j].first;
			y=v[i].second-v[j].second;
			if(y<0) {x=-x;y=-y;}
			if(y==0) {x=mod(x);}
			c=cmmdc(mod(x),y);
			x/=c;y/=c;
			a[m].first=x;
			a[m].second=y;
			m++;}
	std::sort(a,a+m);
	i=0;
	while(i<m){
		j=1;
		while(i<m-1 && a[i]==a[i+1]) ++i,++j;
		rez+=comb(j);
		++i;}
	printf("%lld\n",rez);
	fclose(stdout);
	return 0;
}