Pagini recente » Cod sursa (job #2172374) | Cod sursa (job #2450170) | Cod sursa (job #750525) | Cod sursa (job #1785149) | Cod sursa (job #2313252)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream f("patrate3.in");
ofstream g("patrate3.out");
struct punct
{
double x, y;
} cord_puncte[1001];
int verifica(double a, double b)
{
if(abs(a - b) < 0.00001)
return 1;
return 0;
}
int caut_bin(int left, int right, punct Z)
{
int middle;
while (left <= right)
{
middle = (left + right) / 2;
if (verifica(Z.x, cord_puncte[middle].x) && verifica(Z.y, cord_puncte[middle].y))
return 1;
if (verifica(Z.x, cord_puncte[middle].x))
{
if (Z.y < cord_puncte[middle].y)
right = middle - 1;
else
left = middle + 1;
}
else
{
if (Z.x < cord_puncte[middle].x)
right = middle - 1;
else
left = middle + 1;
}
}
return 0;
}
int cmp(punct A, punct B)
{
if (A.x < B.x)
return true;
if (A.x == B.x)
if (A.y < B.y)
return true;
return false;
}
int main()
{
int n, i, j, nr = 0;
punct mij, A, B;
f >> n;
for (i = 1; i <= n; i++)
f >> cord_puncte[i].x >> cord_puncte[i].y;
sort(cord_puncte + 1, cord_puncte + n + 1, cmp);
for (i = 1; i < n; i++)
for (j = i + 1; j <= n; j++)
{
mij.x = (cord_puncte[i].x + cord_puncte[j].x) / 2;
mij.y = (cord_puncte[i].y + cord_puncte[j].y) / 2;
A.x = mij.x + mij.y - cord_puncte[j].y;
A.y = mij.y - mij.x + cord_puncte[j].x;
B.x = mij.x - mij.y + cord_puncte[j].y;
B.y = mij.y + mij.x - cord_puncte[j].x;
// cout <<"333";
if (caut_bin(1, n, A) && caut_bin(1, n, B))
nr++;
}
/// nr = nr - 50;
g << nr / 2;
return 0;
}