Cod sursa(job #133640)

Utilizator megabyteBarsan Paul megabyte Data 9 februarie 2008 13:09:33
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#define INF "trapez.in"
#define OUF "trapez.out"
#define pb(arg) push_back(arg)
#define sz(arg) arg.size()

using namespace std;

const int NMAX=1024;
const double EPS=1e-14;

int x[NMAX],y[NMAX],n;
vector<double> pante;

bool cmp(double a,double b)
{
	return (b-a)>EPS;
}

double modl(double nr)
{
	if(nr<0.0) return (nr*(-1));
	else return nr;
}

int main()
{
	FILE *in,*out;
	in=fopen(INF,"r");
	out=fopen(OUF,"w");
	int i,j,dim;
	long long total=0;
	double m;
	fscanf(in,"%d",&n);
	for(i=1;i<=n;++i) fscanf(in,"%d%d",x+i,y+i);

	for(i=1;i<n;++i)
		for(j=i+1;j<=n;++j)//pantele dintre toate perechile de puncte
		{
			if((x[j]-x[i])!=0)
				m=(double)(y[j]-y[i])/(x[j]-x[i]);
			else m=(EPS*10);
			pante.pb(m);
		}
	
	sort(pante.begin(),pante.end(),cmp);
	dim=sz(pante);

	for(i=0;i<dim;++i)
	{
		for(j=i+1;j<dim;++j)
			if(modl(pante[i]-pante[j])<EPS) ++total;
			else break;
	}

	fprintf(out,"%lld\n",total);
	fclose(in);fclose(out);
	return 0;
}