Cod sursa(job #719280)

Utilizator andreifirstCioara Andrei Ioan andreifirst Data 21 martie 2012 18:04:14
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include <cmath>
using namespace std;

ifstream f("trapez.in"); ofstream g("trapez.out");

struct panta {int x, y;};

panta v[1000005], p[1005];
int i, j, n, m, cmmdc, t, x, y, r, rez;

inline bool comp (panta fx, panta fy){return fx.x<fy.x || (fx.x==fy.x && fx.y<fy.y);}

int gcd(int fx, int fy){
	if (fy==0) return fx;
	else return gcd(fy, fx%fy);
}

int main(){
	f>>n; for (i=1; i<=n; i++) f>>p[i].x>>p[i].y;
	
	t=0;
	for (i=1; i<=n; i++) for (j=i+1; j<=n; j++) {
		if (p[i].x==p[j].x) {
			v[++t].x=2; v[t].y=2;
		}
		else {
			x=p[i].x-p[j].x;
			y=p[i].y-p[j].y;
			if (x<0) { x*=-1; y*=-1; }
			cmmdc=gcd(abs(x), abs(y));
			v[++t].x=x/cmmdc; v[t].y=y/cmmdc;
		}
	}
	
	sort (v+1, v+t+1, comp);
	
	for (i=1; i<=t; i++){
		r=0;
		while (v[i].x==v[i+1].x && v[i].y==v[i+1].y) {
			i++;
			r++;
		}
		
		rez=rez+(r*(r+1))/2;
	}
	g<<rez;
		
}