Cod sursa(job #8499)

Utilizator ProstuStefan-Alexandru Filip Prostu Data 24 ianuarie 2007 21:24:51
Problema Patrate 3 Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <cstdio>
#include <algorithm>

using namespace std;

struct coor {
	int x, y; 
	coor() {;}
	coor(const int a, const int b) { x = a; y = b; }
};

bool operator<(const coor &a, const coor &b) {
	return a.x < b.x || (a.x == b.x && a.y < b.y);
}

coor operator+(const coor &a, const coor &b) {
	return coor(a.x + b.x, a.y + b.y);
}

coor operator/(const coor &a, const int k) {
	return coor(a.x / k, a.y / k);
}

const int NMAX = 1024;
const int ZEC = 1000;

int N;
coor A[NMAX];
int cnt;

void read() {
	FILE *fin = fopen("patrate3.in", "rt");
	int i, u, v;

	fscanf(fin, " %d", &N);

	for (i = 0; i < N; ++i) {
		fscanf(fin, " %d.%d", &u, &v);
		A[i].x = u * ZEC + (u < 0 ? -v : v) / 10;

		fscanf(fin, " %d.%d", &u, &v);
		A[i].y = u * ZEC + (u < 0 ? -v : v) / 10;
	}

	fclose(fin);
}

void count() {
	int i, j;
	coor c1, c2, mij, d;

	for (i = 0; i < N; ++i)
		for (j = i + 1; j < N; ++j) {

			mij = (A[i] + A[j]) / 2;
			d = coor( mij.x - A[i].x, mij.y - A[i].y );

			c1 = coor(mij.x + d.y, mij.y - d.x);
			c2 = coor(mij.x - d.y, mij.y + d.x);

			if (binary_search(A + i + 1, A + N, c1) && binary_search(A + i + 1, A + N, c2))
//				printf("%d %d\n", i, j),
//				printf("%d %d ... %d %d\n", A[i].x, A[i].y, A[j].x, A[j].y),
//				printf("%d %d ... %d %d\n\n", c1.x, c1.y, c2.x, c2.y),
				++cnt;
		}
}

void write() {
	FILE *fout = fopen("patrate3.out", "wt");

	fprintf(fout, "%d\n", cnt);

	fclose(fout);
}

int main() {
	
	read();

	sort(A, A + N);

	count();

	write();

	return 0;
}