Cod sursa(job #2215139)

Utilizator lucametehauDart Monkey lucametehau Data 21 iunie 2018 09:36:48
Problema Patrate 3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>
#include <algorithm>
#include <cmath>
#define x first
#define y second

using namespace std;

ifstream cin ("patrate3.in");
ofstream cout ("patrate3.out");

const int NMAX = 1000;
const double EPS = 1e-8;
typedef pair <long double, long double> Point;

int n;
int squares;

Point v[1 + NMAX];

bool egale(long double a, long double b) {
  return (abs(a - b) < EPS);
}

bool find(Point p) {
  int st = 1, dr = n, mid;
  while(st <= dr) {
    mid = (st + dr) / 2;
    if(egale(v[mid].x, p.x) && egale(v[mid].y, p.y))
      return 1;
    if(egale(v[mid].x, p.x)) {
      if(v[mid].y < p.y)
        st = mid + 1;
      else
        dr = mid - 1;
    } else {
      if(v[mid].x < p.x)
        st = mid + 1;
      else
        dr = mid - 1;
    }
  }
  return 0;
}

int main() {
  cin >> n;
  for(int i = 1; i <= n; i++)
    cin >> v[i].x >> v[i].y;
  sort(v + 1, v + n + 1);
  for(int i = 1; i < n; i++) {
    for(int j = i + 1; j <= n; j++) {
      Point Mid, A, B; // Mid este mijlocul patratului
      Mid = {(v[i].x + v[j].x) / 2, (v[i].y + v[j].y) / 2};
      A = {Mid.x - (v[j].y - Mid.y), Mid.y + (v[j].x - Mid.x)};
      B = {Mid.x + (v[j].y - Mid.y), Mid.y - (v[j].x - Mid.x)};
      if(find(A) && find(B))
        squares++;
    }
  }
  squares /= 2;
  cout << squares;
  return 0;
}