Cod sursa(job #736449)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 18 aprilie 2012 17:46:30
Problema Patrate 3 Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<math.h>
#include<algorithm>
using namespace std;
#define mod 1001
struct punct {
	float x,y;
};
vector <punct> v[mod];
punct a[1001];
inline float modul(float a)
{
	if(a>=0)
		return a;
	else return -a;
}
inline void adauga(punct x)
{
	int k;
	k=(int)(x.x+x.y)%mod;
	if(k<0)
		k=-k;
	v[k].push_back(x);
}
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((v[k][i].x==x.x)&&(v[k][i].y==x.y))
			return 1;
	}
	return 0;
}
int main ()
{
	int n,i,j,nr;
	double b,aux;
	punct x,y,d,mij;
	ifstream f("patrate3.in");
	ofstream g("patrate3.out");
	f>>n;
	for(i=1;i<=n;i++) {
		f>>b;
		a[i].x=b*10000;
		f>>b;
		a[i].y=b*10000;
		adauga(a[i]);
	}
	f.close();
	nr=0;
	for(i=1;i<n;i++) 
		for(j=i+1;j<=n;j++) {
			mij.x=(a[i].x+a[j].x)/2;
			mij.y=(a[i].y+a[j].y)/2;
			d.x=modul(mij.x-a[i].x);
			d.y=modul(mij.y-a[i].y);
			if(a[i].y<=a[j].y) {
				x.x=mij.x+d.y;
				x.y=mij.y-d.x;
				y.x=mij.x-d.y;
				y.y=mij.y+d.x;
			}
			else {
				x.x=mij.x-d.y; 
				x.y=mij.y-d.x; 
				y.x=mij.x+d.y; 
				y.y=mij.y+d.x;
			}
			if((cauta(x))&&(cauta(y)))
				nr++;
			else {
				aux=x.y;
				x.y=y.y;
				y.y=aux;
				if((cauta(x))&&(cauta(y)))
					nr++;
			}
		}
	g<<nr/2;
	g.close();
	return 0;
}