Pagini recente » Cod sursa (job #1468015) | Cod sursa (job #1397325) | Cod sursa (job #1178471) | Cod sursa (job #2851966) | Cod sursa (job #1592483)
#include <fstream>
#include <algorithm>
#define x first
#define y second
using namespace std;
ifstream fin ("patrate3.in");
ofstream fout ("patrate3.out");
int n, sol;
pair < int, int > V[1010];
pair < double, double > aux;
bool Caut_Binar(pair < int, int > elem)
{
int i = 0;
for (int lg = 1024; lg; lg >>= 1)
{
if (i + lg <= n && V[i + lg].x <= elem.x)
{
if (V[i + lg].x == elem.x)
{
if (V[i + lg].y <= elem.y)
{
i += lg;
}
}
else
{
i += lg;
}
}
}
return (V[i] == elem);
}
inline int Modul(int m)
{
if (m < 0) return -m;
return m;
}
int main()
{
fin >> n;
for (int i = 1; i <= n; i ++)
{
fin >> aux.x >> aux.y;
aux.x *= 100000;
aux.y *= 100000;
V[i].x = int(aux.x);
V[i].y = int(aux.y);
}
sort (V + 1, V + 1 + n);
for (int i = 1; i <= n; i ++)
{
for (int j = i + 1; j <= n; j ++)
{
pair < int, int > mij, d, pct1, pct2;
mij.x = (V[i].x + V[j].x) / 2;
mij.y = (V[i].y + V[j].y) / 2;
d.x = Modul(mij.x - V[i].x);
d.y = Modul(mij.y - V[i].y);
if (V[i].y < V[j].y)
{
pct1.x = mij.x - d.y;
pct1.y = mij.y + d.x;
pct2.x = mij.x + d.y;
pct2.y = mij.y - d.x;
}
else
{
pct1.x = mij.x - d.y;
pct1.y = mij.y - d.x;
pct2.x = mij.x + d.y;
pct2.y = mij.y + d.x;
}
if (Caut_Binar(pct1) && Caut_Binar(pct2)) sol ++;
}
}
fout << sol << '\n';
fout.close();
return 0;
}