Cod sursa(job #736383)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 18 aprilie 2012 15:46:58
Problema Patrate 3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<math.h>
#include<algorithm>
using namespace std;
#define mod 101
struct punct {
	double x,y;
};
vector <punct> v[mod];
punct a[1001];
inline bool cmp(const punct a, const punct b)
{
	return a.y<b.y;
}
inline void adauga(punct x)
{
	v[(int)(x.x+x.y)%mod].push_back(x);
}
inline int cauta(punct x)
{
	int n,i,k;
	double a,b;
	k=(int)(x.x+x.y)%mod;
	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 d,b;
	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]);
	}
	sort(a+1,a+n+1,cmp);
	for(i=1;i<=n;i++)
		cout<<a[i].x<<" "<<a[i].y<<endl;
	f.close();
	nr=0;
	for(i=1;i<n;i++) 
		for(j=i+1;j<=n;j++) {
			if(a[i].x>=a[j].x) {
				x.y=a[j].y-(a[j].x-a[i].x);
				d=(double)((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));
				b=sqrt(d-(a[j].y-x.y)*(a[j].y-x.y));
				x.x=a[j].x-b;
				if(x.x<a[j].x)
					x.x=a[j].x+b;				
				y.y=a[i].y-(a[j].x-a[i].x);
				b=sqrt(d-(a[i].y-y.y)*(a[i].y-y.y));
				y.x=a[i].x-b;
				if(y.x<a[i].x)
					y.x=a[i].x+b;
				if((cauta(x))&&(cauta(y)))
					nr++;
			}
		}
	g<<nr/4;
	g.close();
	return 0;
}