Cod sursa(job #736454)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 18 aprilie 2012 18:02:03
Problema Patrate 3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<math.h>
#include<algorithm>
using namespace std;
#define mod 1001
#define eps 0.0001
struct punct {
	double x,y;
};
vector <punct> v[mod];
punct a[1001];
inline void adauga(punct x)
{
	int k;
	k=(int)(x.x+x.y)%mod;
	if(k<0)
		k=-k;
	v[k].push_back(x);
}
int compara(punct x, punct y)
{
	if((y.x-x.x)>=eps) 
		return 1;
	if(fabs(y.x-x.x)<eps) {
		if((y.y-x.y)>=eps) 
			return 1;
		if(fabs(y.y-x.y)<eps) 
			return 1;
		return 0;
	}
	else return 0;
}
inline int cauta(punct x)
{
	int n,i,k;
	k=(int)(x.x+x.y)%mod;
	if(k<0)
		k=-k;
	n=v[k].size()-1;
	for(i=0;i<=n;i++) {
		if(compara(v[k][i],x))
			return 1;
	}
	return 0;
}
int main ()
{
	int n,i,j,nr;	punct x,y;
	ifstream f("patrate3.in");
	ofstream g("patrate3.out");
	f>>n;
	for(i=1;i<=n;i++) {
		f>>a[i].x>>a[i].y;
		adauga(a[i]);
	}
	f.close();
	nr=0;
	for(i=1;i<n;i++) 
		for(j=i+1;j<=n;j++) {
			x.x=a[i].y-a[j].y+a[i].x;
			x.y=a[j].x-a[i].x+a[i].y;
			
			y.x=a[i].y-a[j].y+a[j].x;
			y.y=a[j].x-a[i].x+a[j].y;
			
			if((cauta(x))&&(cauta(y)))
				nr++;
		}
	g<<nr/2;
	g.close();
	return 0;
}