Pagini recente » Cod sursa (job #1663679) | Cod sursa (job #1489262) | Cod sursa (job #180468) | Cod sursa (job #687076) | Cod sursa (job #1981256)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream f("patrate3.in");
ofstream g("patrate3.out");
int N;
double eps = 1e-4;
struct punct
{
double x, y;
} p[1001], v[1001];
bool cmp(punct a, punct b)
{
if(a.x == b.x) return a.y < b.y;
return a.x < b.x;
}
void citire()
{
f >> N;
for(int i = 1; i <= N; i++)
{
f >> p[i].x >> p[i].y;
p[i].x = round(p[i].x * 10000);
p[i].y = round(p[i].y * 10000);
}
}
bool cautbin(punct P)
{
int st = 1, dr = N, m;
while(st <= dr)
{
m = st + (dr - st) / 2;
if(p[m].x == P.x && p[m].y == P.y) return 1;
if((p[m].x == P.x && p[m].y < P.y) || p[m].x < P.x) st = m + 1;
else dr = m - 1;
}
return 0;
}
void solve()
{
sort(p + 1, p + N + 1, cmp);
int nrp = 0;
for(int i = 1; i < N; i++)
for(int j = i + 1; j <= N; j++) //pct p[i] si p[j] sunt o diagonala
{
punct M, v1, v2;
M.x = (p[i].x + p[j].x) / 2, M.y = (p[i].y + p[j].y) / 2;
v1.x = M.x + p[i].y - M.y, v1.y = M.y + M.x - p[i].x;
v2.x = M.x + M.y - p[i].y, v2.y = M.y + p[i].x - M.x;
if(cautbin(v1) && cautbin(v2)) nrp++;
}
g << nrp / 2;
}
int main()
{
citire();
solve();
return 0;
}