Cod sursa(job #737530)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 19 aprilie 2012 16:41:41
Problema Patrate 3 Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<math.h>
using namespace std;
struct patrat {
	double d;
	int p1,p2;
};
struct punct {
	double x,y;
};
vector <patrat> v[400000];
punct a[1001];
inline void adauga(patrat x)
{
	v[int(x.d*10)].push_back(x);
}
inline int cauta(patrat x)
{
	int i,k,n,pd,pd1,pd2;
	k=int(x.d*10);
	n=v[k].size()-1;
	pd=0;
	pd1=0;
	pd2=0;
	for(i=0;i<=n;i++)
		if(x.d==v[k][i].d) {
			if((x.p1!=v[k][i].p1)&&(x.p1!=v[k][i].p2)&&(x.p2!=v[k][i].p1)&&(x.p2!=v[k][i].p2)) 
				pd++;
			else if((x.p1!=v[k][i].p1)&&(x.p1!=v[k][i].p2)&&((x.p2==v[k][i].p2)||(x.p2==v[k][i].p1)))
				pd2++;
			else if((x.p2!=v[k][i].p1)&&(x.p2!=v[k][i].p2)&&((x.p1==v[k][i].p2)||(x.p1=v[k][i].p1)))
				pd1++;
		}
	if((pd>=2)&&(pd2>=2)&&(pd1>=2))
		return 2;
	if((pd>=1)&&(pd2>=1)&&(pd1>=1))
		return 1;
	return 0;
}
int main ()
{
	int n,i,j,nr;
	patrat x;
	ifstream f("patrate3.in");
	ofstream g("patrate3.out");
	f>>n;
	for(i=1;i<=n;i++) 
		f>>a[i].x>>a[i].y;
	f.close();
	for(i=1;i<=n-1;i++) 
		for(j=i+1;j<=n;j++) {
			x.d=(float)sqrt((float)(a[i].x-a[j].x)*(a[i].x-a[j].x)+(float)(a[i].y-a[j].y)*(a[i].y-a[j].y));
			x.p1=i;
			x.p2=j;
			adauga(x);
		}
	nr=0;
	for(i=1;i<=n;i++) 
		for(j=i+1;j<=n;j++) {
			x.d=(float)sqrt((float)(a[i].x-a[j].x)*(a[i].x-a[j].x)+(float)(a[i].y-a[j].y)*(a[i].y-a[j].y));
			x.p1=i;
			x.p2=j;
			nr=nr+cauta(x);
		}
	g<<nr/4;
	g.close();
	return 0;
}