Cod sursa(job #1047418)

Utilizator Robert29FMI Tilica Robert Robert29 Data 4 decembrie 2013 13:24:19
Problema Patrate 3 Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<stdio.h>
#include<algorithm>
#define er 0.0001
using namespace std;
FILE*f=fopen("patrate3.in","r");
FILE*g=fopen("patrate3.out","w");
int n;
double abs1(double a)
{
	if(a<0)
		return -a;
	return a;
}
struct punct
{
	double x,y;
} v[1001],p1,p2;
int cmp(punct a,punct b)
{
	if(a.x==b.x)
		return a.y<b.y;
	return a.x<b.x;
}
int cautbin(punct x)
{
	int p=1;
	int u=n;
	int m;
	while(p<=u)
	{
		m=(p+u)/2;
		if(cmp(x,v[m]))
			u=m-1;
		else
			p=m+1;
		if(abs1(v[m].x-x.x)<er&&abs1(v[m].y-x.y)<er)
		return 1;
	}
	
	
	return 0;
}
int main()
{
	
	fscanf(f,"%d",&n);
	for(int i=1;i<=n;++i)
		fscanf(f,"%lf%lf",&v[i].x,&v[i].y);
		
	sort(v+1,v+n+1,cmp);
	int nr=0;
	for(int i=1;i<n;++i)
		for(int j=i+1;j<=n;++j)
		{
			double mijx,mijy,dx,dy,x1,x2,y1,y2;
			mijx=(v[i].x+v[j].x)/2;
			mijy=(v[i].y+v[j].y)/2;
			dx=abs1(mijx-v[i].x);
			dy=abs1(mijy-v[i].y);
			p1.y=mijy-dx;
			p2.y=mijy+dx;
			if(v[i].y<v[j].y)
			{
				p1.x=mijx+dy;
				p2.x=mijx-dy;
				
				if(cautbin(p1)&&cautbin(p2))
					++nr;
			}
			else
			{
				p1.x=mijx-dy;
				p2.x=mijx+dy;
				
				if(cautbin(p1)&&cautbin(p2))
					++nr;
			}
		}
	
	fprintf(g,"%d",nr/2);
	
	fclose(f);
	fclose(g);
	return 0;
}