Pagini recente » Cod sursa (job #3186881) | Cod sursa (job #2650557) | Cod sursa (job #1341173) | Cod sursa (job #887663) | Cod sursa (job #1053710)
#include<stdio.h>
#include<algorithm>
#define er 0.0001
using namespace std;
FILE*f = fopen("patrate3.in", "r");
FILE*g = fopen("patrate3.out", "w");
int n;
double abs1(double a)
{
if (a<0)
return -a;
return a;
}
struct punct
{
double x, y;
} v[1001], p1, p2;
int cmp(punct a, punct b)
{
if (abs1(a.x - b.x)<er)
return a.y<b.y;
return a.x<b.x;
}
int cautbin(punct x)
{
int p = 1;
int u = n;
int m;
while (p <= u)
{
m = (p + u) / 2;
if (cmp(x, v[m]))
u = m - 1;
else
p = m + 1;
if (abs1(v[m].x - x.x)<er&&abs1(v[m].y - x.y)<er)
return 1;
}
return 0;
}
int main()
{
fscanf(f, "%d", &n);
for (int i = 1; i <= n; ++i)
fscanf(f, "%lf%lf", &v[i].x, &v[i].y);
sort(v + 1, v + n + 1, cmp);
int nr = 0;
for (int i = 1; i<n; ++i)
for (int j = i + 1; j <= n; ++j)
{
double mijx, mijy, dx, dy, x1, x2, y1, y2;
mijx = (v[i].x + v[j].x) / 2;
mijy = (v[i].y + v[j].y) / 2;
dx = abs1(mijx - v[i].x);
dy = abs1(mijy - v[i].y);
p1.y = mijy - dx;
p2.y = mijy + dx;
if (v[i].y<v[j].y)
{
p1.x = mijx + dy;
p2.x = mijx - dy;
if (cautbin(p1) && cautbin(p2))
++nr;
}
else
{
p1.x = mijx - dy;
p2.x = mijx + dy;
if (cautbin(p1) && cautbin(p2))
++nr;
}
}
fprintf(g, "%d", nr / 2);
fclose(f);
fclose(g);
return 0;
}