Cod sursa(job #578767)

Utilizator Robert29FMI Tilica Robert Robert29 Data 11 aprilie 2011 16:23:05
Problema Trapez Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fi("trapez.in");
ofstream fo("trapez.out");
int n,i,sol,x,y,k,j;
int nr,nrx,nry;
struct punct{
	int x,y;
} v[1001],ctg[1000001];
int cmp(punct a,punct b){
	return a.x*b.y<=a.y*b.x;
}
int main() {
	fi>>n;
	for(i=1;i<=n;++i)
		fi>>v[i].x>>v[i].y;

	for(i=1;i<n;++i)
		for(j=i+1;j<=n;++j){
			if(v[i].x==v[j].x)
				nrx++;
			else if(v[i].y==v[j].y)
				nry++;
			else{
				if(v[i].y<v[j].y){
					y=v[j].y-v[i].y;
					x=v[j].x-v[i].x;
				}else{
					y=v[i].y-v[j].y;
					x=v[i].x-v[j].x;
				}
				ctg[++k].x=x;
				ctg[k].y=y;
			}
		}
	
	sort(ctg+1,ctg+k+1,cmp);
	
	for(i=2;i<=k;++i)
		if(ctg[i].x*ctg[i-1].y==ctg[i-1].x*ctg[i].y)
			nr++;
		else{
			if(nr%2){
				x=(nr-1)/2;
				y=nr;
			}
			else{
				x=nr/2;
				y=nr-1;
			}
			sol+=x*y;
			nr=1;
		}
	if(nrx%2){
		x=(nrx-1)/2;
		y=nrx;
	}else{
		x=nrx/2;
		y=nrx-1;
	}
	sol+=x*y;

	if(nry%2){
		x=(nry-1)/2;
		y=nry;
	}else{
		x=nry/2;
		y=nry-1;
	}
	sol+=x*y;
	
	fo<<sol;
	
	return 0;
}