Cod sursa(job #1000457)

Utilizator teoionescuIonescu Teodor teoionescu Data 22 septembrie 2013 21:40:13
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<fstream>
#include<algorithm>
#define min(a,b) ( a < b ? a : b)
#define max(a,b) ( a > b ? a : b)
using namespace std;
ifstream in("trapez.in");
ofstream out("trapez.out");
const int N = 1005;
struct coord{
	int x,y;
} v[N],a[N*N];
int n,k,s;
int cmmdc(int a,int b){
	if(!b) return a;
	else return cmmdc(b,a%b);
}
bool cmp(coord a,coord b){
	if(a.x == b.x) return a.y < b.y;
	return a.x < b.x;
}
int main(){
	int i,j;
	in>>n;
	for(i=1;i<=n;i++) in>>v[i].x>>v[i].y;
	for(i=1;i<=n;i++){
		for(j=i+1;j<=n;j++){
			coord u;
			u.x=v[j].x-v[i].x;
			u.y=v[j].y-v[i].y;
			int cm=cmmdc(u.x,u.y);
			u.x/=cm;
			u.y/=cm;
			a[++k]=u;
		}
	}
	sort(&a[1],&a[k+1],cmp);
	int cc=1;
	for(i=2;i<=k;i++){
		if(a[i].x==a[i-1].x && a[i].y==a[i-1].y){
			cc++;
		}
		else{
			s+=cc*(cc-1)/2;
			cc=1;
		}
	}
	out<<s;
	return 0;
}