Pagini recente » Cod sursa (job #417919) | Cod sursa (job #1032429) | Cod sursa (job #748431) | Cod sursa (job #1664982) | Cod sursa (job #1264837)
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
#define mid (left + right) / 2
const int NMAX = 1505;
const double eps = 1.e-3;
struct POINT {
double x, y;
void read() {
scanf("%lf%lf", &x, &y);
}
};
POINT p[NMAX];
bool cmp (POINT a, POINT b) {
if(fabs(a.x - b.x) < eps)
return a.y < b.y;
return a.x < b.x;
}
int n;
bool found (int left, double x, double y) {
int right;
fprintf(stderr, "caut %lf %lf\n", x, y);
right = n;
while(left <= right) {
if(fabs(p[mid].x - x) < eps) {
if(fabs(p[mid].y - y) < eps)
return 1;
if(p[mid].y < y)
left = mid + 1;
else
right = mid - 1;
continue;
}
if(p[mid].x < x)
left = mid + 1;
else
right = mid - 1;
}
return 0;
}
int main() {
freopen("triang.in", "r", stdin);
freopen("triang.out", "w", stdout);
int i, j, res;
double xMid, yMid, xDif, yDif, rad;
scanf("%d", &n);
for(i = 1; i <= n; ++ i)
p[i].read();
sort(p + 1, p + n + 1, cmp);
rad = sqrt(3) * 0.5;
res = 0;
for(i = 1; i <= n; ++ i)
for(j = i + 1; j <= n; ++ j) {
xDif = p[j].x - p[i].x;
yDif = p[i].y - p[j].y;
xMid = (p[i].x + p[j].x) * 0.5;
yMid = (p[i].y + p[j].y) * 0.5;
fprintf(stderr, "\n\n%lf %lf, %lf %lf\n", p[i].x, p[i].y, p[j].x, p[j].y);
if(found(j + 1, xMid + yDif * rad, yMid + xDif * rad))
++ res;
if(found(j + 1, xMid - yDif * rad, yMid - xDif * rad))
++ res;
}
printf("%d\n", res);
return 0;
}