Cod sursa(job #687024)

Utilizator mihaibogdan10Mihai Bogdan mihaibogdan10 Data 22 februarie 2012 00:26:23
Problema Patrate 3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<cstdio>
#include<vector>
#include<algorithm>
#define MOD 95617
using namespace std;

struct per{float x, y;};
vector <per> h[MOD], v;

int H(float x, float y){
	return (abs)(((int)(3001 * x + 7003 * y)) % MOD);
}

bool Is(float x, float y){
	int i, ind = H(x, y);
	
	for (i = 0; i < (int) h[ind].size(); i++)
		if (h[ind][i].x - x < 0.00001 && h[ind][i].y - y < 0.00001) return true;
	return false;
}

int main(){
	int n, i, j, N;
	float x, y, x1, x2, y1, y2;
	freopen("patrate3.in", "r", stdin), freopen("patrate3.out", "w", stdout);
	scanf ("%d", &n);
	
	for (i = 0; i < n; i++){
		scanf("%f %f", &x, &y);
		
		v.push_back((per) {x, y});
		h[H(x, y)].push_back ((per) {x, y});
	}
	
	for (i = 0, N = 0; i < n; i++)
		for (j = 0; j < n; j++)
			if (i != j){
				x1 = v[i].x + v[i].y - v[j].y;
				y1 = v[i].y - v[i].x + v[j].x;
				x2 = v[j].x - v[j].y + v[i].y;
				y2 = v[j].x + v[j].y - v[i].x;
				if 	(Is(x1, y1) && Is(x2, y2)) N++;
				
				x1 = v[i].x - v[i].y + v[j].y;
				y1 = v[i].y + v[i].x - v[j].x;
				x2 = v[j].x + v[j].y - v[i].y;
				y2 = v[j].y - v[j].x + v[i].x;
				if 	(Is(x1, y1) && Is(x2, y2)) N++;
			}
	
	printf("%d", N / 8);
	return 0;
}