Cod sursa(job #1307645)

Utilizator romircea2010FMI Trifan Mircea Mihai romircea2010 Data 2 ianuarie 2015 17:16:13
Problema Patrate 3 Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <iostream>
#include <cstdio>
#include <fstream>
#include <set>
#include <cmath>
#define pii pair <int, int>
#define mp make_pair
#define x first
#define y second

using namespace std;

const int NMax = 1024;
const int MOD = 30011;
int N;
pii a[NMax];
int ans;
set <pii > s;

int main()
{
    FILE *f = fopen("patrate3.in", "r");
    fscanf(f, "%d", &N);
    for (int i = 1; i <= N; ++ i)
    {
        int x, y, xzec, yzec;
        fscanf(f, "%d.%d %d.%d", &x, &xzec, &y, &yzec);
        a[i].x = (x * 10000 + xzec);
        a[i].y = (y * 10000 + yzec);
        s.insert(mp(a[i].x, a[i].y));
    }
    for (int i = 1; i <= N; ++ i)
        for (int j = i + 1; j <= N; ++ j)
        {
            double x1 = a[i].x, x2 = a[j].x;
            double y1 = a[i].y, y2 = a[j].y;
            if (x1 > x2)
            {
                swap(x1, x2);
                swap(y1, y2);
            }
            double x3, y3, x4, y4;
            double mijx = (x1 + x2) / 2, mijy = (y1 + y2) / 2;
            double dx = fabs(x1 - mijx), dy = fabs(y1 - mijy);
            if (y1 < y2)
            {
                x3 = mijx - dy; y3 = mijy + dx;
                x4 = mijx + dy; y4 = mijy - dx;
            }
            else
            {
                x3 = mijx - dy; y3 = mijy - dx;
                x4 = mijx + dy; y4 = mijy + dx;
            }
            if (s.find(mp(x3, y3)) != s.end() && s.find(mp(x4, y4)) != s.end())
                ++ ans;

        }
    ofstream g ("patrate3.out");
    g << ans / 2 << "\n";
    g.close();
    return 0;
}