Pagini recente » Cod sursa (job #3186792) | Cod sursa (job #1180687) | Cod sursa (job #343381) | Cod sursa (job #806954) | Cod sursa (job #1059801)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("patrate3.in");
ofstream g("patrate3.out");
#define MAXN 1005
struct point
{
double x, y;
}points[MAXN], a0, a1;
int N;
int Compare(double a, double b)
{
if (fabs(a - b) <= 0.00001)
return 1;
return 0;
}
int Equal(point a, point b)
{
return (Compare(a.x, b.x) && Compare(a.y, b.y));
}
int ComparePoints(point a, point b)
{
if (Compare(a.x, b.x))
return (a.y < b.y);
return (a.x< b.x);
}
int sortCompare(point a, point b)
{
if (Compare(a.x, b.x))
return (a.y < b.y);
return (a.x < b.x);
}
int SearchB(point x)
{
int left = 1, right = N, middle;
while (left <= right)
{
middle = (left + right) / 2;
if (Equal(points[middle], x))
return 1;
if (ComparePoints(points[middle], x))
left = middle + 1;
else
right = middle - 1;
}
return 0;
}
int main()
{
int i, j, sol=0;
double a, b;
f >> N;
for (i = 1; i <= N; ++i)
{
f >> a >> b;
points[i].x = a;
points[i].y = b;
}
sort(points + 1, points + N + 1, sortCompare);
for (i = 1; i <= N; ++i)
for (j = i + 1; j <= N; ++j)
{ // Thanks CD
a0.x = points[i].x + points[i].y - points[j].y;
a0.y = points[i].y + points[j].x - points[i].x;
a1.x = points[j].x + points[i].y - points[j].y;
a1.y = points[j].y + points[j].x - points[i].x;
if (SearchB(a1) && SearchB(a0))
++sol;
}
g << sol/2;
return 0;
}