Cod sursa(job #946230)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 4 mai 2013 08:22:38
Problema Patrate 3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<fstream>
#include<algorithm>
#include<cmath>
#define EPS 0.000001
using namespace std;
int n,sol;
struct Punct{double x,y;};
Punct v[1010];

inline bool Sortare(Punct A,Punct B)
{
	if(fabs(A.x-B.x)<EPS)
		return A.y<B.y;
	return A.x<B.x;
}

inline bool Exista(Punct A)
{
	int st,dr,mij;
	st=1;
	dr=n;
	while(st<=dr)
	{
		mij=(st+dr)/2;
		if(fabs(v[mij].x-A.x)<EPS && fabs(v[mij].y-A.y)<EPS)
			return true;
		if(Sortare(v[mij],A)==true)
			st=mij+1;
		else
			dr=mij-1;
	}
	return false;
}

int main()
{
	int i,j;
	Punct A,B;
	ifstream fin("patrate3.in");
	fin>>n;
	for(i=1;i<=n;i++)
		fin>>v[i].x>>v[i].y;
	fin.close();

	sort(v+1,v+n+1,Sortare);
	for(i=1;i<n;i++)
	{
		for(j=i+1;j<=n;j++)
		{
			A.x=v[i].x+v[i].y-v[j].y;
			A.y=v[i].y+v[j].x-v[i].x;
			B.x=v[j].x+v[i].y-v[j].y;
			B.y=v[j].y+v[j].x-v[i].x;
			if(Exista(A) && Exista(B))
				sol++;
		}
	}
	sol/=2;

	ofstream fout("patrate3.out");
	fout<<sol<<"\n";
	fout.close();
	return 0;
}