Pagini recente » Cod sursa (job #2658589) | Cod sursa (job #3165688) | Cod sursa (job #2594332) | Cod sursa (job #2398290) | Cod sursa (job #913453)
Cod sursa(job #913453)
#include <cstdio>
#include <vector>
#include <cmath>
#include <algorithm>
#define INF 1.79769e+308
#define eps 1.0e-4
#define equal(x,y) (fabs(x - y) < eps)
using namespace std;
struct POINT { // ma stresezi :(
double x, y;
};
struct CENTER {
double x, y, pant, len;
};
double panta(POINT a, POINT b) {
if(a.x == b.x)
return INF;
return fabs(a.y - b.y) / fabs(a.x - b.x);
}
double len(POINT a, POINT b) {
double l1, l2;
l1 = fabs(a.x - b.x);
l2 = fabs(a.y - b.y);
return sqrt(l1 * l1 + l2 * l2);
}
bool perp(CENTER c1, CENTER c2) {
return (equal(c1.pant * c2.pant, 1) || (equal(c1.pant, 0) && equal(c2.pant, INF)) || (equal(c2.pant, 0) && equal(c1.pant, INF)));
}
bool iscor(CENTER c1, CENTER c2) {
return perp(c1, c2);
}
bool cmp(CENTER c1, CENTER c2) {
if(c1.x < c2.x)
return true;
if(c1.x > c2.x)
return false;
if(c1.y < c2.y)
return true;
if(c1.y > c2.y)
return false;
if(c1.len < c2.len)
return true;
if(c1.len > c2.len)
return false;
if(c1.pant < c2.pant)
return true;
if(c1.pant > c2.pant)
return false;
return true;
}
vector<POINT> p;
vector<CENTER> c;
long N, nrpat;
int main() {
long i, j, k;
double x, y;
POINT tmp;
CENTER tmpc;
freopen("patrate3.in", "r", stdin);
freopen("patrate3.out", "w", stdout);
scanf("%ld", &N);
for(i = 1; i <= N; i++) {
scanf("%lf %lf", &x, &y);
tmp.x = x;
tmp.y = y;
p.push_back(tmp);
}
for(i = 0; i < N - 1; i++)
for(j = i + 1; j < N; j++) {
tmpc.x = (p[i].x + p[j].x) / 2;
tmpc.y = (p[i].y + p[j].y) / 2;
tmpc.pant = panta(p[i], p[j]);
tmpc.len = len(p[i], p[j]);
c.push_back(tmpc);
}
sort(c.begin(), c.end(), cmp);
for(i = 0; i < c.size() - 1; i++)
if(equal(c[i].x, c[i + 1].x) && equal(c[i].y, c[i + 1].y) && equal(c[i].len, c[i + 1].len)) {
for(k = i + 1; k < c.size() && c[i].x == c[k].x && equal(c[i].y, c[k].y) && equal(c[i].len, c[k].len); k++);
k--;
for(; i < k; i++)
for(j = k; j > i; j--)
if(iscor(c[i], c[j]))
nrpat++;
}
printf("%ld", nrpat);
return 0;
}